W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
正如在Spring MVC 控制器的實現(xiàn)一節(jié)中所討論的,Spring MVC中所有控制器的處理器方法都必須返回一個邏輯視圖的名字,無論是顯式返回(比如返回一個String
、View
或者ModelAndView
)還是隱式返回(比如基于約定的返回)。Spring中的視圖由一個視圖名標識,并由視圖解析器來渲染。Spring有非常多內置的視圖解析器。下表列出了大部分,表后也給出了一些例子。
表21.3 視圖解析器
視圖解析器 | 描述 |
---|---|
AbstractCachingViewResolver | 一個抽象的視圖解析器類,提供了緩存視圖的功能。通常視圖在能夠被使用之前需要經過準備。繼承這個基類的視圖解析器即可以獲得緩存視圖的能力。 |
XmlViewResolver | 視圖解析器接口ViewResolver 的一個實現(xiàn),該類接受一個XML格式的配置文件。該XML文件必須與Spring XML的bean工廠有相同的DTD。默認的配置文件名是/WEB-INF/views.xml 。 |
ResourceBundleViewResolver | 視圖解析器接口ViewResolver 的一個實現(xiàn),采用bundle根路徑所指定的ResourceBundle 中的bean定義作為配置。一般bundle都定義在classpath路徑下的一個配置文件中。默認的配置文件名為views.properties 。 |
UrlBasedViewResolver | ViewResolver 接口的一個簡單實現(xiàn)。它直接使用URL來解析到邏輯視圖名,除此之外不需要其他任何顯式的映射聲明。如果你的邏輯視圖名與你真正的視圖資源名是直接對應的,那么這種直接解析的方式就很方便,不需要你再指定額外的映射。 |
InternalResourceViewResolver | UrlBasedViewResolver 的一個好用的子類。它支持內部資源視圖(具體來說,Servlet和JSP)、以及諸如JstlView 和TilesView 等類的子類。You can specify the view class for all views generated by this resolver by using setViewClass(..) 。更多的細節(jié),請見UrlBasedViewResolver 類的java文檔。 |
VelocityViewResolver / FreeMarkerViewResolver | UrlBasedViewResolver 下的實用子類,支持Velocity視圖VelocityView (Velocity模板)和FreeMarker視圖FreeMarkerView 以及它們對應子類。 |
ContentNegotiatingViewResolver | 視圖解析器接口ViewResolver 的一個實現(xiàn),它會根據(jù)所請求的文件名或請求的Accept 頭來解析一個視圖。更多細節(jié)請見Spring MVC 內容協(xié)商視圖解析器一小節(jié)。 |
我們可以舉個例子,假設這里使用的是JSP視圖技術,那么我們可以使用一個基于URL的視圖解析器UrlBasedViewResolver
。這個視圖解析器會將URL解析成一個視圖名,并將請求轉交給請求分發(fā)器來進行視圖渲染。
<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
邏輯視圖名,那么該視圖解析器會將請求轉發(fā)到RequestDispatcher
,后者會將請求交給/WEB-INF/jsp/test.jsp
視圖去渲染。
如果需要在應用中使用多種不同的視圖技術,你可以使用ResourceBundleViewResolver
:
<bean id="viewResolver"
class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="views"/>
<property name="defaultParentView" value="parentView"/>
</bean>
ResourceBundleViewResolver
會檢索由bundle根路徑下所配置的ResourceBundle
,對于每個視圖而言,其視圖類由[viewname].(class)
屬性的值指定,其視圖url由[viewname].url
屬性的值指定。下一節(jié)將詳細講解視圖技術,你可以在那里找到更多例子。你還可以看到,視圖還允許有基視圖,即properties文件中所有視圖都“繼承”的一個文件。通過繼承技術,你可以為眾多視圖指定一個默認的視圖基類。
AbstractCachingViewResolver
的子類能夠緩存已經解析過的視圖實例。關閉緩存特性也是可以的,只需要將cache
屬性設置為false
即可。另外,如果實在需要在運行時刷新某個視圖(比如修改了Velocity模板時),你可以使用removeFromCache(String viewName, Locale loc)
方法。`
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: