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

相關文章
相關標籤/搜索