請求處理方法執行完成后,最終返回一個ModelAndView對象,對於返回String,View或ModelMap等類型的處理方法,SpringMvc也會在內部將它們裝配成一個ModelAndView對象的,它包含了邏輯名和模型對象的視圖。
SpringMvc借助視圖解析器(ViewResolver)得到最終的視圖對象(View),最終的視圖可能是JSP,也可能是Excel等各種表現形式的視圖。對於最終采取何種視圖對象對模型數據進行渲染,處理器並不關心,處理器的工作重點聚焦在生產模型數據的工作上,從而實現MVC的充分解耦。
視圖(View)的作用是渲染模型數據,將模型數據里的數據以某種形式呈現給客戶,視圖對象由視圖解析器負責實例化,由於視圖是無狀態的,所以它們不會有線程安全的問題。
SpringMvc為邏輯視圖名的解析提供了不同的策略,可以在Spring WEB上下文中配置一種或多種解析策略,並指定它們的先后順序,每一種映射策略對應一個具體的視圖解析器實現類。視圖解析器的作用比較單一:將邏輯視圖解析為一個具體的視圖對象。所有的視圖解析器都必須實現ViewResolver接口。每個視圖解析器都實現了Ordered接口並開放出一個order屬性,可以通過order屬性指定解析器的優先順序,order越小,優先級越高,SpringMvc會按視圖解析器順序對邏輯視圖名進行解析,直到解析成功並返回視圖對象,否則將拋出ServletException異常。
若想直接響應SpringMvc渲染的頁面,可以使用mvc:view-controller
<mvc:view-controller path="springMvc/test" view-name="hujingwei">
所以當訪問路徑"springMvc/test"時,會直接跳轉到hujingwei.jsp這個頁面。
/*
* 關於重定向
* 一般情況下,控制器的方法返回字符串類型的值會被當成邏輯視圖名處理,
* 如果返回的字符串中帶forward:或redirect:前綴的時候,SpringMvc會對它們進行特殊的處理,其后的字符串會被作為URL來處理
* */
