全部的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