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