Spring Web MVC框架(四) 視圖和視圖解析

視圖解析器

在Spring中視圖相關(guān)的兩個接口是ViewResolverView兩個接口,ViewResolver用于視圖名稱和實際視圖之間的映射,View接口用于準(zhǔn)備和傳遞數(shù)據(jù)到實際的視圖。

下面是一些Spring支持的一些ViewResolver攒钳。對于其他視圖技術(shù)(例如Thymeleaf)可能自己實現(xiàn)視圖解析器以便和Spring集成。

視圖解析器 功能
AbstractCachingViewResolver 一個抽象視圖,繼承該類可以讓視圖解析器具有緩存功能
XmlViewResolver 接受XML文件的視圖解析器濒翻,默認(rèn)配置文件在/WEB-INF/views.xml
ResourceBundleViewResolver 使用properties配置文件的視圖解析器,默認(rèn)配置文件是類路徑下的views.properties
UrlBasedViewResolver 一個簡單的視圖解析器啦膜,不做任何匹配有送,需要視圖名和實際視圖文件名相同
InternalResourceViewResolver UrlBasedViewResolver的一個子類,支持Servlet容器的內(nèi)部類型(JSP僧家、Servlet雀摘、以及JSTL等),可以使用setViewClass(..)指定具體的視圖類型
FreeMarkerViewResolver 也是UrlBasedViewResolver的子類八拱,用于FreeMarker視圖技術(shù)
ContentNegotiatingViewResolver 用于解析基于請求文件名或Accept header的視圖

下面是一個InternalResourceViewResolver阵赠,當(dāng)我們傳遞一個index時涯塔,它會添加前綴和后綴,最終解析出實際的視圖文件WEB-INF/jsp/index.jsp清蚀。

<bean id="viewResolver" 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>

另外Spring支持的幾種視圖還可以使用mvc命名空間簡化匕荸。

<mvc:view-resolvers>
    <mvc:freemarker/>
    <mvc:groovy/>
    <mvc:tiles/>
    <mvc:jsp suffix=".jsp"
             prefix="/WEB-INF/jsp/"
             view-class="org.springframework.web.servlet.view.JstlView"/>

</mvc:view-resolvers>

可以定義多個視圖解析器,這時候可以使用order屬性指定視圖解析的順序枷邪,InternalResourceViewResolver總是最后一個視圖解析器每聪。

轉(zhuǎn)發(fā)和重定向

在控制器中還可以設(shè)置轉(zhuǎn)發(fā)和重定向,概念和Servlet中轉(zhuǎn)發(fā)和重定向類似齿风。在視圖名前添加redirect:前綴會重定向到該視圖药薯,這樣頁面和URL都會改變。前綴forward:表示轉(zhuǎn)發(fā)救斑,內(nèi)容會改變但是URL不會變童本。

視圖

JSP和JSTL

JSP和JSTL的視圖解析器配置已經(jīng)在前面說了。這里就不重復(fù)了脸候。

Thymeleaf

Thymeleaf是一個新的模板引擎穷娱,和傳統(tǒng)的JSP相比有很多優(yōu)點(diǎn):一是基于HTML模板,因此比JSP更加直接运沦,易于閱讀泵额;二是模板引擎獨(dú)立于Servlet容器,因此可以在非Web環(huán)境下運(yùn)行携添,也可以用來渲染電子郵件等嫁盲。Thymeleaf和Spring的支持是由Thymeleaf團(tuán)隊進(jìn)行的。

要添加Thymeleaf的支持烈掠,首先需要添加Thymeleaf的依賴項羞秤。在Gradle中很簡單,由于thymeleaf-spring4依賴于thymeleaf-core左敌,因此添加thymeleaf-spring4就會自動添加thymeleaf-core瘾蛋,非常方便。

dependencies {
    compile group: 'org.thymeleaf', name: 'thymeleaf-spring4', version: '3.0.0.RELEASE'
}

之后需要配置Thymeleaf的視圖解析器矫限。對于Thymeleaf來說哺哼,還需要配置它的視圖引擎和視圖解析器。

<bean id="templateResolver"
      class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
    <property name="prefix" value="/WEB-INF/templates/"/>
    <property name="suffix" value=".html"/>
    <property name="templateMode" value="HTML5"/>
</bean>

<bean id="templateEngine"
      class="org.thymeleaf.spring4.SpringTemplateEngine">
    <property name="templateResolver" ref="templateResolver"/>
</bean>
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
    <property name="templateEngine" ref="templateEngine"/>
    <property name="order" value="1"/>
    <property name="characterEncoding" value="UTF-8"/>
</bean>

然后編寫一個Themeleaf視圖叼风。由于Spring Web MVC的良好的分層取董,因此我們的代碼完全不用更改就可以使用Thymeleaf視圖。關(guān)于Thymeleaf的詳細(xì)使用方法參見其文檔咬扇。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>主頁</title>
</head>
<body>
<h1>呵呵<span th:text="${name}"></span></h1>
</body>
</html>

除了這兩種之外甲葬,還有很多常用的視圖技術(shù),例如FreeMarkder懈贺、Groovy標(biāo)記模板等经窖。它們的使用方法請查看相應(yīng)文檔坡垫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市画侣,隨后出現(xiàn)的幾起案子冰悠,更是在濱河造成了極大的恐慌,老刑警劉巖配乱,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溉卓,死亡現(xiàn)場離奇詭異,居然都是意外死亡搬泥,警方通過查閱死者的電腦和手機(jī)桑寨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忿檩,“玉大人尉尾,你說我怎么就攤上這事≡锿福” “怎么了沙咏?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長班套。 經(jīng)常有香客問我肢藐,道長,這世上最難降的妖魔是什么吱韭? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任吆豹,我火速辦了婚禮,結(jié)果婚禮上杉女,老公的妹妹穿的比我還像新娘瞻讽。我一直安慰自己鸳吸,他們只是感情好熏挎,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晌砾,像睡著了一般坎拐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上养匈,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天哼勇,我揣著相機(jī)與錄音,去河邊找鬼呕乎。 笑死积担,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猬仁。 我是一名探鬼主播帝璧,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼先誉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了的烁?” 一聲冷哼從身側(cè)響起褐耳,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渴庆,沒想到半個月后铃芦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡襟雷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年刃滓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耸弄。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡注盈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叙赚,到底是詐尸還是另有隱情老客,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布震叮,位于F島的核電站胧砰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏苇瓣。R本人自食惡果不足惜尉间,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望击罪。 院中可真熱鬧哲嘲,春花似錦、人聲如沸媳禁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竣稽。三九已至囱怕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毫别,已是汗流浹背娃弓。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岛宦,地道東北人台丛。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像砾肺,于是被迫代替她去往敵國和親挽霉。 傳聞我的和親對象是個殘疾皇子私恬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容