spring視圖解析器和視圖的理解

在視圖解析器的繼承關係中,從AbstractCachingViewResolver開發分成不同形式的解析器,ResourceBundleViewResolver,
UrlBasedViewResolver,XmlViewResolver。
[img]http://dl.iteye.com/upload/attachment/355725/7273bf2e-7111-30d7-97e0-140927ba3b53-thumb.bmp[/img]

今天看了下spring有關的源碼,記錄下關於ResourceBundleViewResolver,UrlBasedViewResolver和
解析器之間的不同。

如果用ResourceBundleViewResolver解析器,我們會定義一個或多個與它相關聯的文件,默認爲views.properties
文件,通過不同名字的文件可以進行國際化的配置。如果spring配置文件中定義了ResourceBundleViewResolver解析器,當controller返回
ModelAndView的時候,系統會根據當前所訪問的地區把與ResourceBundleViewResolver相對應文件的內容映射成bean,與spring配置
文件中定義的其它bean一起放在spring的緩存map中,(key中.class之前的部分做爲beanid,value作爲map的值),所以如果我們把
views.properties中定義的內容放入spring的配置文件中,一樣可以。
然後系統把ModelAndView中返回的試圖名作爲key從map中查詢定義的view類,如果查詢出,則根據views.properties中與view相對應的url查找出view模版。
如果查詢不到,則繼續用在spring中定義的其它視圖解析器查詢視圖,這是它與UrlBasedViewResolver解析器最大的不同點,UrlBasedViewResolver,
下的子解析器如果在他們的緩存中查詢不到視圖,則會判斷ModelAndView中提供的viewname與它的屬性viewNames中的字符創是否相對應,如果對應則新生成一個view。
放入緩存中,如果不存在對應則通過spring配置文件中定義的其它視圖解析器查詢視圖

在UrlBasedViewResolver視圖解析器中定義了(viewNames可以在spring配置文件中配置)
prefix,suffix和viewNames三個字段,prefix和suffix是字符串類型,它們會與ModelAndView中返回的viewname一起組成請求視圖(.jsp, .vm 等)的模版路徑
(prefix + viewname + suffix),系統會根據這個路徑查找到視圖模版,將模版與model一起返回給瀏覽器(這裏還有一些其它的工作,excel視圖是需要自己繼承的,等)。
而viewNames字段是一個字符串數組,它裏面的字符串可以寫成正則表達式的方式。viewNames是字符串數組

ResourceBundleViewResolver配置文件中定義的url與UrlBasedViewResolver中prefix + viewname + suffix意思是一樣的。viewname 爲ModelAndView中的視圖名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章