註意:本文環境搭建請參考5.2節 6.1、視圖概述 視圖的作用是渲染數據,將模型Model中的數據展示給用戶; SpringMVC視圖的種類很多,預設有轉發視圖和重定向視圖; SpringMVC中的視圖是View介面; 當工程引入jstl的依賴,轉發視圖會自動轉換為JstlView; 若使用的視圖技 ...
註意:本文環境搭建請參考5.2節
6.1、視圖概述
-
視圖的作用是渲染數據,將模型Model中的數據展示給用戶;
-
SpringMVC視圖的種類很多,預設有轉發視圖和重定向視圖;
-
SpringMVC中的視圖是View介面;
-
當工程引入jstl的依賴,轉發視圖會自動轉換為JstlView;
-
若使用的視圖技術為Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的視圖解析器,
由此視圖解析器解析之後所得到的是ThymeleafView。
6.2、ThymeleafView(常用)
-
當控制器方法中所設置的視圖名稱沒有任何首碼時,視圖名稱會被SpringMVC配置文件中所配置的視圖解析器解析;
-
視圖名稱拼接視圖首碼和視圖尾碼所得到的最終路徑,會通過轉發的方式實現跳轉。
6.2.1、控制器方法示例
註意:此時SpringMVC配置文件中所配置的視圖解析器為ThymeleafViewResolver
@RequestMapping("/test/view/thymeleaf")
public String testThymeleafView(){
return "success";
}
6.2.2、頁面請求示例
<a th:href="@{/test/view/thymeleaf}">測試SpringMVC的視圖ThymeleafView</a>
6.2.3、測試效果
由瀏覽器地址欄可知,ThymeleafView本質上是轉發視圖
6.3、InternalResourceView(少用)
-
SpringMVC中預設的轉發視圖是InternalResourceView;
-
當控制器方法中所設置的視圖名稱以"forward:"為首碼時,此時的視圖名稱不會被SpringMVC配置文件中所配置的視圖解析器解析,
而是會將首碼"forward:"去掉,剩餘部分作為最終路徑,通過轉發的方式實現跳轉
6.3.1、控制器方法示例
註意:因為DispatcherServlet接管了所有請求,所以此時請求轉發不能直接返回物理視圖,但可以調用其他請求
@RequestMapping("/test/view/forward")
public String testInternalResourceView(){
return "forward:/test/view/thymeleaf";
}
6.3.2、頁面請求示例
<a th:href="@{/test/view/forward}">測試SpringMVC的視圖InternalResourceView</a>
6.3.3、測試效果
6.4、重定向視圖
-
SpringMVC中預設的重定向視圖是RedirectView;
-
當控制器方法中所設置的視圖名稱以"redirect:"為首碼時,此時的視圖名稱不會被SpringMVC配置文件中所配置的視圖解析器解析,
而是會將首碼"redirect:"去掉,剩餘部分作為最終路徑,通過重定向的方式實現跳轉
6.4.1、控制器方法示例
註意:因為DispatcherServlet接管了所有請求,所以此時重定向不能直接返回物理視圖,但可以調用其他請求
@RequestMapping("/test/view/redirect")
public String testRedirectView(){
return "redirect:/test/view/thymeleaf";
}
6.4.2、頁面請求示例
<a th:href="@{/test/view/redirect}">測試SpringMVC的視圖RedirectView</a>
6.4.3、測試效果
註意:瀏覽器地址欄顯示為重定向的地址
6.5、請求轉發和重定向的使用情景
-
請求轉發:失敗時使用,例如登錄失敗用請求轉發
-
重定向:成功時使用,例如登錄成功用重定向
6.6、視圖控制器
當控制器方法僅僅用來實現頁面跳轉(即只需要設置視圖名稱時),可以使用視圖控制器來替代其功能
6.6.1、要被替代的控制器方法示例
6.6.2、視圖控制器示例
註意:如果設置了視圖控制器,則只有視圖控制器所指定的請求路徑會被處理,其他請求將全部404;
為了讓其他請求也能得到(控制器方法)處理,需要開啟mvc的註解驅動
<!--開啟mvc的註解驅動-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--
視圖控制器(mvc:view-controller):為指定的請求直接設置(邏輯)視圖名稱,從而實現頁面的跳轉
path屬性:設置要處理的請求路徑
view-name屬性:設置要跳轉到的邏輯視圖
-->
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>