Spring MVC学习笔记(六)

所有的MVC框架都为web应用提供定位views。Spring提供view解析器,不限定具体的view技术,将models渲染到浏览器。
有两个重要的接口ViewResolver和View。ViewResolver提供view名称与实际views之间的映射。

使用ViewResolver接口解析views

在Spring Web MVC控制器中,所有处理方法都对应view逻辑名。或显式或隐式。Spring中的Views由逻辑view名定位,由view解析器解析。Spring自带了多个view解析器。

AbstractCachingViewResolver
XmlViewResolver
ResourceBundleViewResolver
UrlBasedViewResolver 接单实现ViewResolver接口直接将view逻辑名解析为URL,无显式的映射定义。适用于逻辑名与view源文件名匹配。
InternalResourceViewResolver
VelocityViewResolver/FreeMarkerViewResolver
ContentNegotiatingViewResolver

使用JSP作为视图解析技术,可以使用UrlBasedViewResolver。该解析器将视图名解析为URL。

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver>
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
  <property name="prefix" value="/WEB-INF/jsp/"/>
  <property name="suffix" value=".jsp"/>
</bean>

当返回逻辑视图名test时,将请求解析为/WEB-INF/jsp/test.jsp。

当在web应用中使用不同的view激素时,可以使用ResourceBundleViewResolver:

<bean>
  <property name="basename" value="views"/>
  <property name="defaultParentView" value="parentView"/>
</bean>

ResourceBundleViewResolver检索有basename定义的ResourceBundle。对每个假定的view,使用属性[viewname].(class)作为view class、属性[viewname].url作为view url。

解析器链

Spring支持多个视图解析器。通过在application上下文中添加多个解析器,必要时设置order属性确定顺序。order属性越高,使用顺序越靠后。

<bean id="jspViewResolver" 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>
<bean id="excelViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="order" value="1"/>
<property name="location" value="/WEB-INF/views.xml"/>
</bean>
<!-- in views.xml -->
<beans>
<bean name="report" class="org.springframework.example.ReportExcelView"/>
</beans>

如果一个具体的视图解析器不能解析出某个视图,Spring在上下文中查找其他的视图解析器。如果视图解析器存在,Spring继续直到视图被解析。如果不存在,Spring将抛出ServletException。

你可能感兴趣的:(spring,mvc,解析view)