亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Spring MVC各個視圖解析器的含義

2019-11-06 06:04:02
字體:
來源:轉載
供稿:網友
所有的We MVC框架都有一套它自己的解析視圖的機制,SPRing MVC也不例外,它使用ViewResolver進行視圖解析,讓用戶在瀏覽器中渲染模型。ViewResolver是一種開箱即用的技術,能夠解析jsp、Velocity模板和XSLT等多種視圖。    Spring處理視圖最重要的兩個接口是ViewResolver和View。ViewResolver接口在視圖名稱和真正的視圖之間提供映射; 而View接口則處理請求將真正的視圖呈現給用戶。    1.幾種常見的ViewResolver視圖解析器    在Spring MVC 4控制器中,所有的處理方法必須返回一個邏輯視圖名稱,無論是顯式的(返回String,View或ModelAndView)還是隱式的。Spring中的視圖由視圖解析器處理這個邏輯視圖名稱,Spring有以下幾種視圖解析器:  AbstractCachingViewResolver:用來緩存視圖的抽象視圖解析器。通常情況下,視圖在使用前就準備好了。繼承改解析器就能夠使用視圖緩存。xmlViewResolver :XML視圖解析器。它實現了ViewResolver接口,接受相同DTD定義的XML配置文件作為Spring的XML bean工廠。ResourceBundleViewResolver:它使用了ResourceBundle定義下的bean,實現了ViewResolver接口,指定了綁定包的名稱。通常情況下,配置文件會定義在classpath下的properties文件中,默認的文件名字是views.properties。UrlBasedViewResolver:它簡單實現了ViewResolver接口,它不用顯式定義,直接影響邏輯視圖到URL的映射。它讓你不用任何映射就能通過邏輯視圖名稱訪問資源。InternalResourceViewResolver:國際化視圖解析器。VelocityViewResolver /FreeMarkerViewResolver:Velocity或FreeMarker視圖解析器。ContentNegotiatingViewResolver:內容談判視圖解析器    在JSP視圖技術中,Spring MVC經常會使用 UrlBasedViewResolver視圖解析器,該解析器會將視圖名稱翻譯成URL并通過RequestDispatcher處理請求后渲染視圖。<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/views/"/>    <property name="suffix" value=".jsp"/></bean>    假如我們配置了如上所示的URL視圖解析器,我們返回了一個叫“favmvc”的視圖名稱,視圖解析器就會將請求轉發到RequestDispatcher,然后跳轉到/WEB-INF/views/favmvc.jsp頁面。    假如我們想要在應用中使用不同的視圖技術,我們就應該使用 ResourceBundleViewResolver。<bean id="viewResolver"        class="org.springframework.web.servlet.view.ResourceBundleViewResolver">    <property name="basename" value="views"/>    <property name="defaultParentView" value="parentView"/></bean>    ResourceBundleViewResolver對于每個要處理的視圖,都會檢查 ResourceBundle中basename的唯一性,它使用 [viewname].(class)作為視圖類,[viewname].url作為視圖的url。    2. 鏈式視圖解析器(Chaining ViewResolvers)    Spring支持同時配置多個視圖解析器,也就是鏈式視圖解析器。這樣,在某些情況下,就能夠重寫某些視圖。如果我們配置了多個視圖解析器,并想要給視圖解析器排序的話,設定 order 屬性就可以指定解析器執行的順序。order的值越高,解析器執行的順序越晚。    下面代碼所示的例子由兩個視圖解析器組成。 InternalResourceViewResolver總是最后一個執行,而 XmlViewResolver則指定解析XML視圖(InternalResourceViewResolver不支持Excel視圖)。<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就會拋出 ServletException。    視圖解析器規定如果沒有找到視圖就返回null。但不是所有的視圖解析器都這么做,因為在某些情況下,解析器并不能檢測是否存在視圖。比如InternalResourceViewResolver在內部使用RequestDispatcher時,調度轉發是判斷JSP是否存在的唯一方法,但該action卻只能執行一次。VelocityViewResolver和其它的一些解析器也這樣,區分這些視圖解析器能否在找不到視圖的情況下返回null,最好的方法就是看官方文檔中它是否支持了。由于 InternalResourceViewResolver總會返回視圖,在視圖鏈中使用InternalResourceViewResolver就能讓你避免這些問題。    3.  重定向視圖    在controller控制器中強制重定向的方法就是創建并返回Spring的RedirectView實例。在這種情況下,DispatcherServlet不再使用正常的視圖機制,因為它已經返回了重定向視圖,DispatcherServlet只是告訴視圖去顯示。    RedirectView會調用 HttpServletResponse.sendRedirect()方法,然后它就作為HTTP重定向返回給客戶端瀏覽器。默認情況下,所有的模板屬性變量都認為是重定向URL,其余的屬性自動附加為查詢參數。    redirect前綴    盡管RedirectView工作機制很好,但如果控制器本身創建RedirectView時,毫無疑問控制器本身知道該如何重定向。這樣做并不好,控制器不應該關心響應如何處理,它只是處理被注入的視圖名稱。    當我們在返回視圖名稱時,如果使用了“redirect:”前綴(如“redirect : /login”),UrlBasedViewResolver視圖控制器會識別這是一次特殊的重定向,并把redirect后面的視圖名稱當做重定向的地址。    假如我們在http://favccxx.com應用中返回“redirect:/favboy”視圖時, 系統會重定向到http://favccxx.com/favboy。但如果我們返回了“redirect:http://favsoft.me”這樣的視圖時,系統會重定向到http://favsoft.me的視圖上。    forward前綴    forward前綴視圖是另一種通過URLBasedViewResolver機制處理到的轉向機制,它在視圖名稱周圍創建InternalResourceView,因此這個前綴跟InternalResourceViewResolver和InternalResourceView無關。但這個前綴在你想使用其它視圖技術但想強制通過Servlet/JSP引擎處理資源進行轉向時是有用的。    redirect與forward的區別       redirect方式相當 于"response.sendRedirect()".這種方式外部特征就是瀏覽器地址欄最后顯示的路徑是轉發后的新的路徑.工作方式是這樣的,服務器端會首先發一個response給瀏覽器,然后瀏覽器收到這個response后再發一個requeset給服務器,然后服務器發新的response給瀏覽器。這時頁面收到的request是一個新從瀏覽器發來的.這種方式的結果是:    A.在轉發前后有兩個不同的request對象,轉發前后的兩個控制器在request上的參數(request.getParameter())和request屬性(request.getAttribute())不能共享。    B.如果轉發前后的兩個控制器都配置在spring 攔截器范圍內,這樣攔截器會攔截前后兩個request,即會攔截兩次。    C.最后返回到瀏覽器后,因為地址欄顯示的是轉發后的url,所以刷新頁面時只會執行后面的url映射的控制器。    forward方式相當于 request.getRequestDispatcher().forward(request,response) .這種方式的外部特征是瀏覽器地址顯示的路徑是轉發前的路徑。工作方式是這樣,forward 發生在服務器內部,在前一個控制器處理完畢后,直接進入下一個控制器處理,并將最后的response發給瀏覽器。這種方式的結果是:    A.轉發前后是同一個request,后一個控制器可共享前一個控制器的參數與屬性。    B.因為是同一個request,攔截器只會攔截前一個url,如果前一個url在映射時未配置到攔截器攔截,則攔截后一個url,即只攔截一次。    C.最后返回到瀏覽器后,因為地址欄顯示的是轉發前的url,所以刷新頁面時會依次執行前后兩個控制器。   總結:本文介紹了Spring MVC 4中常見的幾種視圖解析器,以及如何配置視圖解析器包括鏈式視圖解析器,最后除了正常視圖映射機制外,我們還能夠通過redirect/forward視圖轉向機制完成視圖的重定向。本文偏向原理性介紹,關于視圖解析機制在工作中的使用,并沒有做過多的介紹,目的是讓讀者能夠了解ViewResolver的工作機制。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91精品久久久久| 精品国产成人av| 国产精品偷伦视频免费观看国产| 成人福利免费观看| 欧美高跟鞋交xxxxxhd| 精品五月天久久| 午夜精品久久久久久久99热浪潮| 日本高清不卡的在线| 精品久久国产精品| 亚洲国产欧美一区| 亚洲欧美日韩高清| 亚洲男人第一av网站| 国产精品久久综合av爱欲tv| 欧美成人黑人xx视频免费观看| 日韩免费高清在线观看| 俺去啦;欧美日韩| 国产亚洲欧美视频| 中文国产亚洲喷潮| 91在线视频成人| 欧美大秀在线观看| 91麻豆国产语对白在线观看| 国产一区二区丝袜高跟鞋图片| 国产精品久久久久久av福利软件| 一区二区三区在线播放欧美| 国产午夜精品全部视频在线播放| 最新日韩中文字幕| 国产精品青青在线观看爽香蕉| 美乳少妇欧美精品| 性欧美xxxx交| 欧美在线视频一区二区| 一区二区三区天堂av| 韩国视频理论视频久久| yellow中文字幕久久| 亚洲欧美另类自拍| 91精品视频一区| 国产精品视频免费观看www| 亚洲第一视频网站| 国产97在线|日韩| 亚洲女人被黑人巨大进入al| 欧美午夜片在线免费观看| 久久久精品国产网站| 欧美黑人狂野猛交老妇| 91亚洲精品久久久久久久久久久久| 国产99视频精品免视看7| 亚洲第一二三四五区| 欧美性黄网官网| 中文字幕欧美在线| 久久久久中文字幕2018| 日韩美女免费观看| 亚洲精品福利在线观看| 午夜精品一区二区三区视频免费看| 91亚洲国产成人精品性色| 国产综合香蕉五月婷在线| 啊v视频在线一区二区三区| 91久热免费在线视频| 欧美片一区二区三区| 亚洲精品国产精品国自产观看浪潮| 日韩天堂在线视频| 国产精品尤物福利片在线观看| 亚洲人成毛片在线播放| 在线观看国产成人av片| 亚洲欧美综合图区| 8x拔播拔播x8国产精品| 亚洲人成在线电影| 成人免费xxxxx在线观看| 成人羞羞国产免费| 欧美在线视频观看免费网站| 亚洲成人网久久久| 美女性感视频久久久| 欧美性黄网官网| 精品久久久久久中文字幕大豆网| 中文字幕亚洲综合久久筱田步美| 久久天天躁夜夜躁狠狠躁2022| 欧美日韩性视频| 欧美性xxxx| 中文字幕综合在线| 亚洲视频欧美视频| 国产精品1234| 欧美激情第三页| 国产不卡一区二区在线播放| 亚洲国产成人精品女人久久久| 亚洲第一级黄色片| 91精品国产91久久久久| 亚洲区一区二区| 亚洲www永久成人夜色| 欧美日韩国产成人在线| 欧美在线性爱视频| 国产精品亚洲综合天堂夜夜| 欧美国产一区二区三区| 国语自产精品视频在线看抢先版图片| 91精品久久久久久久久久久久久久| 国产女人精品视频| 久久久久久高潮国产精品视| 色偷偷噜噜噜亚洲男人的天堂| 欧美精品xxx| 国产精品私拍pans大尺度在线| 亚洲精品自拍第一页| 色噜噜狠狠狠综合曰曰曰88av| 久热精品视频在线| 国产精品国产福利国产秒拍| 久久影视电视剧免费网站| 92国产精品久久久久首页| 久国内精品在线| 国产精品影片在线观看| 久久99久久99精品中文字幕| 亚洲www视频| 欧美性xxxx极品高清hd直播| 亚洲精美色品网站| 懂色av影视一区二区三区| 欧美日韩亚洲视频| 亚洲欧美在线第一页| 欧美一级在线亚洲天堂| 亚洲欧美日韩国产中文专区| 欧美视频免费在线观看| 中文字幕久热精品在线视频| 中文字幕日韩欧美在线| 亚洲成人黄色在线| 国产精品免费久久久久久| 2018国产精品视频| 91精品国产九九九久久久亚洲| 国产欧美日韩丝袜精品一区| 美女av一区二区三区| 18久久久久久| 亚洲欧美成人网| 欧美裸体视频网站| 欧美成人精品影院| 精品亚洲国产成av人片传媒| 亚洲成人激情在线观看| 97超碰蝌蚪网人人做人人爽| 欧美噜噜久久久xxx| 97成人精品视频在线观看| 九九久久久久99精品| 亚洲xxx大片| 国产精品国内视频| 久久亚洲一区二区三区四区五区高| 中文字幕欧美日韩va免费视频| 91av视频在线播放| 欧美性极品少妇精品网站| 欧美大成色www永久网站婷| 国产精品久久久久久久久| 亚洲黄色免费三级| 91精品在线播放| 午夜精品久久久99热福利| 色悠久久久久综合先锋影音下载| 最新的欧美黄色| 红桃视频成人在线观看| 亚洲国内精品在线| 福利一区视频在线观看| 欧美精品在线播放| 久久精品国产精品亚洲| 免费97视频在线精品国自产拍| 亚洲深夜福利在线| 日韩欧美在线看| 茄子视频成人在线| 国产乱肥老妇国产一区二| 一区二区在线免费视频| 欧美日韩免费区域视频在线观看| 国外成人性视频| 欧美成人精品在线播放| 国产亚洲精品美女久久久久| 中文字幕日韩av综合精品| 亚洲精品第一页| 国产精品视频yy9099| 日产精品99久久久久久|