ViewResolver也就是視圖解析器,他將是我們《探索SpringMVC》系列要介紹的最后一個(gè)常用的組件。其他組件:MultipartResolver、LocaleResolver、ThemeResolver、RequestToViewNameTranslator、FlashMapManager,相對(duì)簡(jiǎn)單,大家可以自行了解。
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、成都做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出南溪免費(fèi)做網(wǎng)站回饋大家。ViewResolver我們知道視圖技術(shù)有很多種,例如:JSP、FreeMarker、Thymeleaf等。如果直接操作這些技術(shù),那簡(jiǎn)直不要太糟糕。為了統(tǒng)一操作,SpringMVC抽象出來兩個(gè)接口:ViewResolver和View。任何視圖技術(shù)都需要實(shí)現(xiàn)這兩個(gè)接口。
Spring源碼中的定義
從上述定義,視圖解析器需要?jiǎng)?chuàng)建View。而這意味著兩個(gè)重要使命實(shí)例化和初始化。實(shí)例化,當(dāng)然是創(chuàng)建對(duì)應(yīng)的View實(shí)現(xiàn)對(duì)象。而初始化則負(fù)責(zé)將View與對(duì)應(yīng)的實(shí)現(xiàn)技術(shù)進(jìn)行綁定/銜接。
與視圖技術(shù)的銜接前面我們知道View才是真正渲染頁(yè)面內(nèi)容的,這意味著View才是視圖技術(shù)的真正操作者。因此必須通過某種手段獲得響應(yīng)的配置或者重要的組件。而Spring提供的是WebApplicationObjectSupport
。不管是ViewResolver,還是View都是基于該抽象類來實(shí)現(xiàn)獲取ApplicationContext。
為了便于各個(gè)視圖技術(shù)廠商對(duì)接,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。才有了后面對(duì)FreeMarkerView的初始化。
FreeMarkerView
通過該WebApplicationObjectSupport
實(shí)現(xiàn)了與FreeMarker的銜接。
重點(diǎn)方法:
FreeMarkerView#initServletContext
UrlBaseViewResolver#applyLifecycleMethods
調(diào)用到。這里會(huì)通過ApplicationContext獲取到FreeMarkerConfig。該類是SpringMVC與Freemarker銜接的類,他會(huì)持有FreeMarker的Configuration對(duì)象。通過Configuration對(duì)象,就能獲得FreeMarker的Template類。FreeMarkerView#buildTemplateModel
FreeMarkerView#processTemplate
想看源碼的同學(xué),這里送一張簡(jiǎn)化版調(diào)用流程圖
注意,該圖不涉及分支流程,例如:緩存邏輯、重定向邏輯。
WebApplicationObjectSupport
獲取到ApplicationContext對(duì)AbstractUrlBasedView進(jìn)行初始化。AbstractUrlBasedView則通過InitializingBean實(shí)現(xiàn)對(duì)View的url進(jìn)行校驗(yàn)。WebApplicationObjectSupport
從容器中獲取FreeMarkerConfig,實(shí)現(xiàn)與FreeMarker的銜接。ViewResolver相對(duì)簡(jiǎn)單。但我們重點(diǎn)要學(xué)會(huì)設(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級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:探索SpringMVC-組件之ViewResolver-創(chuàng)新互聯(lián)
文章位置:http://muchs.cn/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容