Spring MVC学习笔记(六)

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

使用ViewResolver接口解析viewsspring

在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。app

<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:jsp

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

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

解析器链excel

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

<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。xml

相关文章
相关标签/搜索