SpringMVC框架 第6章 視圖解析
第6章 視圖解析
6.1 SpringMVC如何解析視圖概述
- 不論控制器返回一個String,ModelAndView,View都會轉(zhuǎn)換為ModelAndView對象,由視圖解析器解析視圖,然后,進(jìn)行頁面的跳轉(zhuǎn)。 ?
- 視圖解析源碼分析:重要的兩個接口
- 斷點(diǎn)調(diào)試源碼
- 流程圖
6.2 視圖和視圖解析器
- 請求處理方法執(zhí)行完成后,最終返回一個 ModelAndView 對象。對于那些返回 String,View 或 ModeMap 等類型的處理方法,Spring MVC 也會在內(nèi)部將它們裝配成一個 ModelAndView 對象,它包含了邏輯名和模型對象的視圖
- Spring MVC 借助視圖解析器(ViewResolver)得到最終的視圖對象(View),最終的視圖可以是 JSP ,也可能是 Excel、JFreeChart等各種表現(xiàn)形式的視圖
- 對于最終究竟采取何種視圖對象對模型數(shù)據(jù)進(jìn)行渲染,處理器并不關(guān)心,處理器工作重點(diǎn)聚焦在生產(chǎn)模型數(shù)據(jù)的工作上,從而實(shí)現(xiàn) MVC 的充分解耦
6.3 視圖
- 視圖的作用是渲染模型數(shù)據(jù),將模型里的數(shù)據(jù)以某種形式呈現(xiàn)給客戶。
- 為了實(shí)現(xiàn)視圖模型和具體實(shí)現(xiàn)技術(shù)的解耦,Spring 在 springframework.web.servlet 包中定義了一個高度抽象的 View接口:
- 視圖對象由視圖解析器負(fù)責(zé)實(shí)例化。由于視圖是無狀態(tài)的,所以他們不會有線程安全的問題
6.4 常用的視圖實(shí)現(xiàn)類
6.5 JstlView
6.6 視圖解析器
- SpringMVC 為邏輯視圖名的解析提供了不同的策略,可以在 Spring WEB 上下文中配置一種或多種解析策略,并指定他們之間的先后順序。每一種映射策略對應(yīng)一個具體的視圖解析器實(shí)現(xiàn)類。
- 視圖解析器的作用比較單一:將邏輯視圖解析為一個具體的視圖對象。
- 所有的視圖解析器都必須實(shí)現(xiàn) ViewResolver 接口:
6.7 常用的視圖解析器實(shí)現(xiàn)類
- 程序員可以選擇一種視圖解析器或混用多種視圖解析器
- 每個視圖解析器都實(shí)現(xiàn)了 Ordered 接口并開放出一個 order 屬性,可以通過 order 屬性指定解析器的優(yōu)先順序,order ?越小優(yōu)先級越高。
- SpringMVC 會按視圖解析器順序的優(yōu)先順序?qū)壿嬕晥D名進(jìn)行解析,直到解析成功并返回視圖對象,否則將拋出 ServletException 異常
- InternalResourceViewResolver
- JSP 是最常見的視圖技術(shù),可以使用 InternalResourceViewResolve作為視圖解析器:
.
6.8?mvc:view-controller標(biāo)簽
1)若希望直接響應(yīng)通過 SpringMVC 渲染的頁面,可以使用 mvc:view-controller?標(biāo)簽實(shí)現(xiàn)
<!-- 直接配置響應(yīng)的頁面:無需經(jīng)過控制器來執(zhí)行結(jié)果 --> <mvc:view-controller path="/success" view-name="success"/> |
????2)請求的路徑:
3)配置<mvc:view-controller>會導(dǎo)致其他請求路徑失效
???解決辦法:
<!-- 在實(shí)際開發(fā)過程中都需要配置mvc:annotation-driven標(biāo)簽,后面講,這里先配置上 --> <mvc:annotation-driven/>? ? ? |
6.9 自定義視圖【了解】
- 自定義視圖(需要加入SpringMVC,那么,一定需要實(shí)現(xiàn)框架的接口)
- 若希望使用 Excel 展示數(shù)據(jù)列表,僅需要擴(kuò)展 SpringMVC 提供的 AbstractExcelView或 AbstractJExcelView 即可。
- 實(shí)現(xiàn) buildExcelDocument() 方法,在方法中使用模型數(shù)據(jù)對象構(gòu)建 Excel 文檔就可以了。
- AbstractExcelView 基于 POI API,而 AbstractJExcelView 是基于 JExcelAPI 的。
- 視圖對象需要配置 IOC 容器中的一個 Bean,使用 BeanNameViewResolver 作為視圖解析器即可
- 若希望直接在瀏覽器中直接下載 Excel 文檔,則可以設(shè)置響應(yīng)頭 Content-Disposition的值為 attachment;filename=xxx.xls
6.9.1 實(shí)驗(yàn)代碼
6.9.2 源碼參考
6.10重定向
- return "forward:/index.jsp"