1. 程式人生 > >第四十章:Spring MVC框架之細節瞭解16

第四十章:Spring MVC框架之細節瞭解16

第十四章 瞭解內容
1.SpringMVC配置檔案可以放在WEB-INF下

①命名規範:[servlet-name]-servlet.xml
②位置:/WEB-INF目錄下
③示例:/WEB-INF/springDispatcherServlet-servlet.xml
④使用預設配置檔案可以省略init-param

  <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
	<servlet>
		<servlet-name>springDispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<!--修改自己的配置檔案路徑-->
			<param-value>location</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>springDispatcherServlet</servlet-name>
		<!--一般可以用/-->
		<url-pattern>url</url-pattern>
	</servlet-mapping>

[email protected]註解的其他對映方式
①根據請求引數情況對映

請求引數中必須包含userName @RequestMapping(params=“userName”)

請求引數中不能包含userName @RequestMapping(params="!userName")

請求引數中必須包含userName且值必須為Tom2015 @RequestMapping(params=“userName=Tom2015”)

請求引數中必須包含userName但值不能為Tom2015 @RequestMapping(params=“userName=!Tom2015”)

請求引數中必須包含userName且值為Tom2015,同時必須包含userPwd但值不限 @RequestMapping(params={“userName=Tom2015”,“userPwd”} )
②根據請求訊息頭內容對映

根據Accept-Language:zh-CN,zh;q=0.8對映 @RequestMapping (value=“headers_request”,headers= “Accept-Language=zh-CN,en;q=0.8” )
③使用Ant風格萬用字元

?:匹配檔名中的一個字元
*:匹配檔名中的任意字元
**:匹配多層路徑
[email protected]

幫我們獲取請求訊息頭資料

@RequestMapping("/getRequestHearder")
public String getRequestHeader(@RequestHeader(value="User-Agent",defaultValue="miss") String userAgent) {
    System.out.println(userAgent);
    return "result";
}

[email protected]

幫我們獲取Cookie值

@RequestMapping("/getCookie")
public String getCookie(@CookieValue(value="JSESSIONID", defaultValue="miss") String jSessionId) {
    System.out.println(jSessionId);
    return "result";
}

[email protected]

標註了@ModelAttribute的方法會在當前handler類中每一個handler方法執行前執行。
[email protected]
①@SessionAttributes註解的用法
[1]只能標註在類上

@Controller
@SessionAttributes(value="user")
public class SessionHandler {
……

[2]value屬性

根據value屬性中指定的值從請求域中讀取一個物件,然後儲存到Session域中。
[3]type屬性

@SessionAttributes(types=User.class) 從請求域中讀取一個型別為User的物件儲存到Session域中。
②隱患

使用@SessionAttributes註解會在下述情況中引發異常
[1]情景描述
在這裡插入圖片描述

handler方法的入參的型別是User,類名首字母小寫後正好是@SessionAttributes註解中指定的value屬性值。
[2]行為描述

@SessionAttributes註解會在執行handler方法前從Session域中獲取User物件,然後將請求引數注入到這個User物件中。然後傳入handler方法。 此時如果Session域中找不到User物件,那麼就會丟擲如下異常: org.springframework.web.HttpSessionRequiredException: Session attribute ‘user’ required - not found in session
[3]解決辦法

@ModelAttribute public User getUser() { return new User(); } 提供一個標記了@ModelAttribute註解的方法,讓@SessionAttributes註解可以從模型中獲取User物件來接收請求引數。
7.當PUT和DELETE請求遇到Tomcat8

Restful風格(Delete請求和PUT請求)在高版本Tomcat中無法轉發到JSP頁面,解決辦法是在JSP頁面上設定isErrorPage=“true”
8.HttpEntity

通過HttpEntity物件可以獲取請求相關資訊
在這裡插入圖片描述

9.ResponseEntity

通過ResponseEntity物件可以設定響應相關資訊,可以藉助ResponseEntity實現檔案下載
在這裡插入圖片描述
10.HttpMessageConverter

HttpMessageConverter是一個介面。是SpringMVC專門提供的做訊息轉換的工具介面。 如下圖所示,請求的報文(請求的HTTP協議內容)會被封裝成為HttpInputMessage實現類。然後交給HttpMessageConverter類去轉換。 然後,我們SpringMVC程式的返回資料,交給HttpMessageConverter轉換成為HttpOutputMessage實現類,最終輸出成為響應報文(響應的Http協議)

在這裡插入圖片描述
11.異常對映

使用SimpleMappingExceptionResolver可以對SpringMVC捕獲到的異常進行對映,從而實現在捕獲到特定異常時跳轉到指定的檢視。