spring MVC之按名称解析视图(一)
-----------
当处理器处理完请求时,它可能返回视图对象,也可能返回这个视图对象的逻辑名称。如果它返回的是视图名称,DispatcherServlet就必须用这个名称创建视图对象,并为用户呈现视图。你想为DispatcherServlet定义一种策略,以便按视图名称来解析视图。
在Spring MVC应用程序中,视图由web应用程序上下文中声明的一个或多个视图解析器Bean进行解析。这些Bean必须实现ViewResolver接口,这样DispatcherServlet才能自动侦测到它们。Spring MVC提供了几个ViewResolver实现,让你能根据不同的策略来解析视图。
根据URL解析视图
解析视图的基本策略是直接将它们映射到URL。视图解析器InternalResourceViewResolver用添加前缀和后缀的方法,将
每个视图名称都映射到一个URL上。为了注册InternalResourceViewResolver,可以在Web应用程序上下文中声明一个该类型的Bean。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>
例如,InternalResourceViewResolver会以下面的方式解析视图名称welcome和reservationQuery。
welcome --> /WEB-INF/jsp/welcome.jsp
reservationQuery --> /WEB-INF/jsp/reservationQuery.jsp
解析后的视图类型可以通过viewClass属性指定。默认情况下,如果classpath中有JSTL库(如:jstl.jar),InternalResourceViewResolver就会将视图名称解析到JstlView类型的视图对象中。因此,如果视图是带有JSTL标签的JSP模板,完全可以省略viewClass属性。
InternalResourceViewResolver很简单,它只能解析能够被Servlet API的RequestDispatcher转发的内部资源视图(如内部的jsp文件或者Servlet)。至于Spring MVC支持的其他视图类型,必须利用其他策略对他们进行解析。