四、springMVC之檢視&檢視解析器
阿新 • • 發佈:2022-03-13
一、檢視解析
過程:
請求處理方法執行完成後,最終返回一個ModelAndView物件。對於那些返回String、View 或 ModeMap等型別的處理方法,springMVC也會在內部將他們裝配後成一個ModelAndView物件,他包含了邏輯名和模型物件的檢視。
springMVC藉助檢視解析器得到最終的檢視物件View,最終的檢視可以是JSP,也可能是Excel等各種表現形式的檢視;對於最終究竟採取何種檢視物件 對模型資料進行渲染,處理器不關心,處理器工作重點聚焦在生成模型資料的工作上,從而實現MVC的充分解耦;。
檢視的作用是渲染模型資料,將模型裡的資料以某種形式呈現給客戶;檢視物件由檢視解析器負責例項化。由於檢視是無狀態的,所以他們不會有有執行緒安全的問題;
常用的檢視實現類:
大類 | 檢視型別 | 說明 |
URL檢視資源 | InternalResourceView |
|
JstlView |
|
|
文件資源 | AbstractExcelView |
|
AbstractPdfView |
|
|
報表檢視 | ConfigurableJsperReportsView |
|
JasperReportsCsvView | ||
JasperReportsMulitiFormatView | ||
JasperReportshtmlView | ||
JasperReportsPdfView | ||
JasperReportsXlsView | ||
JSON檢視 | MappingJacksonView |
|
常用的檢視解析器實現類:
大類 | 檢視型別 | 說明 |
解析為Bean的名稱 | BeanNameViewResolver | 將邏輯檢視名解析為一個Bean,Bean的id等於邏輯檢視名。 |
解析為URL檔案 | InternalResourceViewResolver | 將檢視名解析為一個URL檔案,一般使用該解析器將檢視名對映為一個儲存在WEB-INF目錄下的程式檔案(如JSP) |
JasperReportsViewResolver |
|
|
模板檔案檢視 | FreeMarkViewResolver |
|
VelocityViewResolver | 解析為基於Velocity模板技術的模板檔案 | |
VelocityLayoutViewResolver |
例項驗證:
InternalResourceView 之前的例項都有;這裡就驗證jstlView例項;
目錄結構和配置方式:
同HelloWord的配置方式;
新增jstl jar包:
-
jstl.jar
- standard.jar
spring國際化配置:
1 <bean id="messageSource" 2 class="org.springframework.context.support.ResourceBundleMessageSource"> 3 <property name="basename" value="i18n"></property> 4 </bean>
完整檔案:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 9 10 <context:component-scan base-package="handler"></context:component-scan> 11 12 <!-- 配置檢視解析器 如何把handler 方法返回值解析為實際的物理檢視 --> 13 <bean 14 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 15 <property name="prefix" value="/WEB-INF/views/"></property> 16 <property name="suffix" value=".jsp"></property> 17 </bean> 18 19 <!-- 配置國際化資源 --> 20 <!-- 注意id必須為messageSource 否則 使用<s:message code=''></s:message>會報錯 --> 21 <bean id="messageSource" 22 class="org.springframework.context.support.ResourceBundleMessageSource"> 23 <property name="basename" value="i18n"></property> 24 </bean> 25 26 </beans>View Code
國際化檔案:
- i18n_en_US.properties
1 i18n.username=Username 2 i18n.password=Password
- i18n_zh_CN.properties:
1 i18n.username=使用者名稱 2 i18n.password=密碼
RequestMappingTest:
1 package handler; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 6 @RequestMapping("/springmvc") 7 @Controller 8 public class RequestMappingTest { 9 private static final String SUCCESS = "success"; 10 11 @RequestMapping("/testJstlView") 12 public String jstlView() { 13 System.out.println("jstlView"); 14 return SUCCESS; 15 } 16 }
index.jsp:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" isErrorPage="false"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta http-equiv="Content-type" content="text/html;charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <a href="/springmvc/testJstlView">testJstlView</a> 11 </body> 12 </html>View Code
success.jsp:
新增taglib ;
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" isErrorPage="true"%> 3 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 5 <%@ taglib prefix="s" uri="http://www.springframework.org/tags"%> 6 <!DOCTYPE html> 7 <html> 8 <head> 9 <meta charset="UTF-8"> 10 <title>Insert title here</title> 11 </head> 12 <body> 13 <h4>success成功</h4> 14 <br> 15 <fmt:bundle basename="i18n"> 16 <fmt:message key="i18n.username"></fmt:message> 17 18 </fmt:bundle> 19 <br> 20 <fmt:bundle basename="i18n"> 21 <fmt:message key="i18n.password"></fmt:message> 22 </fmt:bundle> 23 <br /> 24 <s:message code="i18n.password"></s:message> 25 26 <br /> 27 </body> 28 </html>
執行結果:
index.jsp執行結果如下圖;點選testJstlView 跳轉到success 頁面,且控制檯列印jstlView