1. 程式人生 > 其它 >四、springMVC之檢視&檢視解析器

四、springMVC之檢視&檢視解析器

一、檢視解析

過程:

  請求處理方法執行完成後,最終返回一個ModelAndView物件。對於那些返回String、View 或 ModeMap等型別的處理方法,springMVC也會在內部將他們裝配後成一個ModelAndView物件,他包含了邏輯名和模型物件的檢視。

  springMVC藉助檢視解析器得到最終的檢視物件View,最終的檢視可以是JSP,也可能是Excel等各種表現形式的檢視;對於最終究竟採取何種檢視物件 對模型資料進行渲染,處理器不關心,處理器工作重點聚焦在生成模型資料的工作上,從而實現MVC的充分解耦;。

  檢視的作用是渲染模型資料,將模型裡的資料以某種形式呈現給客戶;檢視物件由檢視解析器負責例項化。由於檢視是無狀態的,所以他們不會有有執行緒安全的問題;

 常用的檢視實現類:

大類 檢視型別 說明
URL檢視資源 InternalResourceView

將JSP或其它資源封裝成一個檢視是 InternalResourceViewResolver預設使用的檢視實現類

 

JstlView

如果JSP檔案中使用了JSTL國際化標籤的功能,則需要使用該檢視類。

文件資源 AbstractExcelView

Excel文件檢視的抽象類,該檢視的抽象類基於POI構造Excel檔案。

AbstractPdfView

PDF文件檢視的抽象類,該檢視的抽象類基於iText構造PDF檔案。

報表檢視 ConfigurableJsperReportsView

幾個使用JasperReports報表技術的檢視

JasperReportsCsvView
JasperReportsMulitiFormatView
JasperReportshtmlView
JasperReportsPdfView
JasperReportsXlsView
JSON檢視 MappingJacksonView

將模型資料通過jackson開源框架的ObjectMapper以JSON方式輸出

常用的檢視解析器實現類:

大類 檢視型別 說明
解析為Bean的名稱 BeanNameViewResolver 將邏輯檢視名解析為一個Bean,Bean的id等於邏輯檢視名。
解析為URL檔案 InternalResourceViewResolver 將檢視名解析為一個URL檔案,一般使用該解析器將檢視名對映為一個儲存在WEB-INF目錄下的程式檔案(如JSP)
JasperReportsViewResolver

JasperReports是一個基於Java的開源報表工具,該解析器將檢視名解析為報表檔案對應的URL

模板檔案檢視 FreeMarkViewResolver

JasperReports是一個基於Java的開源報表工具,該解析器將檢視名解析為報表檔案對應的URL

 

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