視圖解析器
在Spring中視圖相關(guān)的兩個接口是ViewResolver和View兩個接口渠欺。
- ViewResolver用于視圖名稱和實際視圖之間的映射
- View接口用于準備和傳遞數(shù)據(jù)到實際的視圖妹蔽。
下面是一些Spring支持的一些ViewResolver。對于其他視圖技術(shù)(例如Thymeleaf)可以自己實現(xiàn)視圖解析器以便和Spring集成挠将。
下面是一個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)點:
- 一是基于HTML模板赵颅,因此比JSP更加直接虽另,易于閱讀;
- 二是模板引擎獨立于Servlet容器饺谬,因此可以在非Web環(huán)境下運行捂刺,也可以用來渲染電子郵件等。
Thymeleaf和Spring的支持是由Thymeleaf團隊進行的。
要添加Thymeleaf的支持族展,首先需要添加Thymeleaf的依賴項森缠。在Gradle中很簡單,由于thymeleaf-spring4依賴于thymeleaf-core仪缸,因此添加thymeleaf-spring4就會自動添加thymeleaf-core贵涵,非常方便。
dependencies {
compile group: 'org.thymeleaf', name: 'thymeleaf-spring4', version: '3.0.0.RELEASE'
}
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
之后需要配置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的詳細使用方法參見其文檔自沧。
<!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標記模板等爱谁。它們的使用方法請查看相應(yīng)文檔。