第四十章: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";
}
幫我們獲取Cookie值
@RequestMapping("/getCookie")
public String getCookie(@CookieValue(value="JSESSIONID", defaultValue="miss") String jSessionId) {
System.out.println(jSessionId);
return "result";
}
標註了@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捕獲到的異常進行對映,從而實現在捕獲到特定異常時跳轉到指定的檢視。