在前面說(shuō)Spring MVC請(qǐng)求流程的時(shí)候,提到需要將數(shù)據(jù)模型填充到對(duì)應(yīng)的視圖中,并且匹配到特定的視圖需要由視圖解析器來(lái)解析和渲染視圖,然后以view的形式返回到客戶(hù)端,呈現(xiàn)出用戶(hù)希望看到的形式。
接著看一下View Resolver和View的定義:

當(dāng)給resolveViewName方法傳遞一個(gè)視圖名和Locale對(duì)象時(shí),他會(huì)返回一個(gè)View的實(shí)例。

View接口接收模型以及servlet的request和response對(duì)象,并將輸出結(jié)果渲染到response中。
InternalResourceViewer類(lèi)的定義:

下面是JstlView類(lèi),如果我們?cè)贘SP使用了JSTL標(biāo)簽,那么InternalResourceViewResolver會(huì)將視圖名解析為JstlView形式的JSP文件,從而將JSTL本地化和資源bundle變量暴露給JSTL格式化和信息標(biāo)簽。JtslView的具體定義:

配置InternalResourceViewResolver的方式
(1)Java代碼實(shí)現(xiàn)

(2)XML形式實(shí)現(xiàn)

ResourceBoundleMessageSource類(lèi)
它會(huì)從一個(gè)屬性文件中加載信息,這個(gè)屬性文件的名稱(chēng)是根據(jù)基礎(chǔ)名稱(chēng)來(lái)的。它會(huì)試圖在根路徑的屬性文件中解析信息,這些屬性文件的名稱(chēng)是根據(jù)這個(gè)基礎(chǔ)名稱(chēng)衍生得到的。
ReloadableResourceBoundleMessageSource類(lèi)
該類(lèi)可以重新加載信息屬性,不必重新編譯或者重啟應(yīng)用。
兩者的區(qū)別在于basename屬性設(shè)置為在應(yīng)用的外部查找,ResourceBoundleMessageSource是在類(lèi)路勁下查找。basename屬性可以設(shè)置為在類(lèi)路徑下(以classpath:為前綴),或者文件系統(tǒng)中(以file:為前綴)或者在Web應(yīng)用的根路徑下查找屬性。