ViewResolver也就是視圖解析器,他將是我們《探索SpringMVC》系列要介紹的最后一個(gè)常用的組件。其他組件:MultipartResolver、LocaleResolver、ThemeResolver、RequestToViewNameTranslator、FlashMapManager,相對簡單,大家可以自行了解。

我們知道視圖技術(shù)有很多種,例如:JSP、FreeMarker、Thymeleaf等。如果直接操作這些技術(shù),那簡直不要太糟糕。為了統(tǒng)一操作,SpringMVC抽象出來兩個(gè)接口:ViewResolver和View。任何視圖技術(shù)都需要實(shí)現(xiàn)這兩個(gè)接口。
Spring源碼中的定義
從上述定義,視圖解析器需要?jiǎng)?chuàng)建View。而這意味著兩個(gè)重要使命實(shí)例化和初始化。實(shí)例化,當(dāng)然是創(chuàng)建對應(yīng)的View實(shí)現(xiàn)對象。而初始化則負(fù)責(zé)將View與對應(yīng)的實(shí)現(xiàn)技術(shù)進(jìn)行綁定/銜接。
與視圖技術(shù)的銜接前面我們知道View才是真正渲染頁面內(nèi)容的,這意味著View才是視圖技術(shù)的真正操作者。因此必須通過某種手段獲得響應(yīng)的配置或者重要的組件。而Spring提供的是WebApplicationObjectSupport。不管是ViewResolver,還是View都是基于該抽象類來實(shí)現(xiàn)獲取ApplicationContext。
為了便于各個(gè)視圖技術(shù)廠商對接,Spring實(shí)際上構(gòu)建了一套完整的體系(一系列抽象實(shí)現(xiàn)類),按需實(shí)現(xiàn)。
這里重點(diǎn)提一下
UrlBaseViewResolver#applyLifecycleMethods前面我們說了,WebApplicationObjectSupport是重要的初始化接口。同樣我們也說,是按需實(shí)現(xiàn)。
FreeMarkerViewResolver
從上面的類圖看,F(xiàn)reeMarkerViewResolver似乎并沒有使用到這個(gè)接口,但是其父類UrlBaseViewResolver使用到了。UrlBaseViewResolver通過WebApplicationObjectSupport才能獲取到ApplicationContext。才有了后面對FreeMarkerView的初始化。
FreeMarkerView
通過該WebApplicationObjectSupport實(shí)現(xiàn)了與FreeMarker的銜接。
重點(diǎn)方法:
FreeMarkerView#initServletContextUrlBaseViewResolver#applyLifecycleMethods調(diào)用到。這里會通過ApplicationContext獲取到FreeMarkerConfig。該類是SpringMVC與Freemarker銜接的類,他會持有FreeMarker的Configuration對象。通過Configuration對象,就能獲得FreeMarker的Template類。FreeMarkerView#buildTemplateModelFreeMarkerView#processTemplate想看源碼的同學(xué),這里送一張簡化版調(diào)用流程圖
注意,該圖不涉及分支流程,例如:緩存邏輯、重定向邏輯。
WebApplicationObjectSupport獲取到ApplicationContext對AbstractUrlBasedView進(jìn)行初始化。AbstractUrlBasedView則通過InitializingBean實(shí)現(xiàn)對View的url進(jìn)行校驗(yàn)。WebApplicationObjectSupport從容器中獲取FreeMarkerConfig,實(shí)現(xiàn)與FreeMarker的銜接。ViewResolver相對簡單。但我們重點(diǎn)要學(xué)會設(shè)計(jì)思想。SpringMVC設(shè)計(jì)了一層中間層,做了一層接口轉(zhuǎn)換,換取統(tǒng)一接口、統(tǒng)一操作的便利,以及更多的擴(kuò)展可能。
下一次,我們終于回到了DispatcherServlet了。忘記的同學(xué),可以回去看看。
上一篇:
探索SpringMVC-組件之HandlerExceptionResolver
第一篇:
探索SpringMVC-web上下文
下一篇:
探索SpringMVC-DispatcherServlet
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:探索SpringMVC-組件之ViewResolver-創(chuàng)新互聯(lián)
文章位置:http://chinadenli.net/article14/diioge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、動(dòng)態(tài)網(wǎng)站、面包屑導(dǎo)航、建站公司、網(wǎng)站排名、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容