視圖解析器
在Spring中視圖相關(guān)的兩個接口是ViewResolver
和View
兩個接口,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)文檔坡垫。