springMVC檢視解析原理學習
阿新 • • 發佈:2018-11-09
SpringMVC如何解析檢視概述
不論控制器返回一個String,ModelAndView,View都會轉換為ModelAndView物件,由檢視解析器解析檢視,然後,進行頁面的跳轉。
檢視解析原始碼分析:重要的兩個介面ViewResolver和View。
檢視和檢視解析器
- 請求處理方法執行完成後,最終返回一個 ModelAndView 物件。對於那些返回 String,View 或 ModeMap 等型別的處理方法,Spring MVC 也會在內部將它們裝配成一個 ModelAndView 物件,它包含了邏輯名和模型物件的檢視
- Spring MVC 藉助檢視解析器
- 對於最終究竟採取何種檢視物件對模型資料進行渲染,處理器並不關心,處理器工作重點聚焦在生產模型資料的工作上,從而實現 MVC 的充分解耦
檢視
- 檢視的作用是渲染模型資料,將模型裡的資料以某種形式呈現給客戶,主要就是完成轉發或者是重定向的操作.
- 為了實現檢視模型和具體實現技術的解耦,Spring 在 org.springframework.web.servlet 包中定義了一個高度抽象的 View 介面:
- 檢視物件由檢視解析器負責例項化
常用的檢視實現類
JstlView
- 若專案中使用了JSTL,則SpringMVC 會自動把檢視由InternalResourceView轉為 JstlView (斷點除錯,將JSTL的jar包增加到專案中,檢視解析器會自動修改為JstlView)
- 若希望直接響應通過 SpringMVC 渲染的頁面,可以使用 mvc:view-controller 標籤實現
檢視解析器
- SpringMVC 為邏輯檢視名的解析提供了不同的策略,可以在 Spring WEB 上下文中配置一種或多種解析策略
- 檢視解析器的作用比較單一:將邏輯檢視解析為一個具體的檢視物件。
- 所有的檢視解析器都必須實現 ViewResolver 介面:
常用的檢視解析器實現類
- 程式設計師可以選擇一種檢視解析器或混用多種檢視解析器
- 每個檢視解析器都實現了 Ordered 介面並開放出一個 order 屬性,可以通過 order 屬性指定解析器的優先順序,order 越小優先順序越高。
- SpringMVC 會按檢視解析器順序的優先順序對邏輯檢視名進行解析,直到解析成功並返回檢視物件,否則將丟擲 ServletException 異常
- InternalResourceViewResolver:
- JSP 是最常見的檢視技術,可以使用 InternalResourceViewResolve作為檢視解析器:
mvc:view-controller標籤
1)若希望直接響應通過 SpringMVC 渲染的頁面,可以使用 mvc:view-controller 標籤實現
<!-- 直接配置響應的頁面:無需經過控制器來執行結果 --> <mvc:view-controller path="/success" view-name="success"/> |
2)請求的路徑:
3)配置<mvc:view-controller>會導致其他請求路徑失效
解決辦法:
<!-- 在實際開發過程中都需要配置mvc:annotation-driven標籤,後面講,這裡先配置上 --> <mvc:annotation-driven/> |
重定向
關於重定向
- 一般情況下,控制器方法返回字串型別的值會被當成邏輯檢視名處理
- 如果返回的字串中帶 forward: 或 redirect: 字首時,SpringMVC 會對他們進行特殊處理:將 forward: 和 redirect: 當成指示符,其後的字串作為 URL 來處理
- redirect:success.jsp:會完成一個到 success.jsp 的重定向的操作
- forward:success.jsp:會完成一個到 success.jsp 的轉發操作
定義頁面連結
<a href="springmvc/testRedirect">testRedirect</a> |
定義控制器方法
@RequestMapping("/testRedirect") public String testRedirect(){ System.out.println("testRedirect"); return "redirect:/index.jsp"; //return "forward:/index.jsp"; } |