?
4.12、ParameterizableViewController
參數化視圖控制器,不進行功能處理(即靜態視圖),根據參數的邏輯視圖名直接選擇需要展示的視圖。
- <bean?name="/parameterizableView"??
- class="org.springframework.web.servlet.mvc.ParameterizableViewController">??
- <property?name="viewName"?value="success"/>??
- </bean>??
該控制器接收到請求后直接選擇參數化的視圖,這樣的好處是在配置文件中配置,從而避免程序的硬編碼,比如像幫助頁面等不需要進行功能處理,因此直接使用該控制器映射到視圖。
4.13、AbstractUrlViewController
提供根據請求URL路徑直接轉化為邏輯視圖名的支持基類,即不需要功能處理,直接根據URL計算出邏輯視圖名,并選擇具體視圖進行展示:
urlDecode : 是否進行url解碼,不指定則默認使用服務器編碼進行解碼(如Tomcat默認ISO-8859-1);
urlPathHelper : 用于解析請求路徑的工具類,默認為org.springframework.web.util.UrlPathHelper。
?
UrlFilenameViewController是它的一個實現者,因此我們應該使用UrlFilenameViewController。
?
4.14、UrlFilenameViewController
將請求的URL路徑轉換為邏輯視圖名并返回的轉換控制器,即不需要功能處理,直接根據URL計算出邏輯視圖名,并選擇具體視圖進行展示:
?
根據請求URL路徑計算邏輯視圖名;
?
- <bean?name="/index1/*"???
- class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>??
- <bean?name="/index2/**"???
- class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>??
- <bean?name="/*.html"???
- class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>??
- <bean?name="/index3/*.html"???
- class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>??
/index1/* : 可以匹配/index1/demo,但不匹配/index1/demo/demo,如/index1/demo邏輯視圖名為demo;
/index2/** : 可以匹配/index2路徑下的所有子路徑,如匹配/index2/demo,或/index2/demo/demo,“/index2/demo”的邏輯視圖名為demo,而“/index2/demo/demo”邏輯視圖名為demo/demo;
/*.html : 可以匹配如/abc.html,邏輯視圖名為abc,后綴會被刪除(不僅僅可以是html);
/index3/*.html : 可以匹配/index3/abc.html,邏輯視圖名也是abc;
?
上述模式為Spring Web MVC使用的Ant-style?模式進行匹配的:
?
- ?????匹配一個字符,如/index??可以匹配?/index1?,?但不能匹配?/index?或?/index12??
- *????匹配零個或多個字符,如/index1/*,可以匹配/index1/demo,但不匹配/index1/demo/demo?
- **???匹配零個或多個路徑,如/index2/**:可以匹配/index2路徑下的所有子路徑,如匹配/index2/demo,或/index2/demo/demo?
- ?
- 如果我有如下模式,那Spring該選擇哪一個執行呢?當我的請求為“/long/long”時如下所示:?
- /long/long?
- /long/**/abc??
- /long/**?
- /**?
- Spring的AbstractUrlHandlerMapping使用:最長匹配優先;?
- 如請求為“/long/long”?將匹配第一個“/long/long”,但請求“/long/acd”?則將匹配?“/long/**”,如請求“/long/aa/abc”則匹配“/long/**/abc”,如請求“/abc”則將匹配“/**”??
UrlFilenameViewController還提供了如下屬性:
prefix : 生成邏輯視圖名的前綴;
suffix : 生成邏輯視圖名的后綴;
- protected?String?postProcessViewName(String?viewName)?{??
- ????????return?getPrefix()?+?viewName?+?getSuffix();??
- }??
- <bean?name="/*.htm"?class="org.springframework.web.servlet.mvc.UrlFilenameViewController">??
- ????????<property?name="prefix"?value="test"/>??
- ????????<property?name="suffix"?value="test"/>??
- </bean>??
當 prefix= “test ”,suffix= “test ” ,如上所示的 /*.htm : 可以匹配如/abc.htm,但邏輯視圖名將變為testabctest。
?
私塾在線學習網 原創內容( http://sishuok.com )
原創內容,轉載請注明私塾在線【 http://sishuok.com/forum/blogPost/list/5498.html 】
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
