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