三、SpringMVC--@PathVariable 對映 URL 繫結的佔位符
阿新 • • 發佈:2020-12-10
@PathVariable 對映 URL 繫結的佔位符
- 待佔位符的URL是spring3.0新增的功能,該功能在SpringMVC想REST目標挺進發展過程中具有里程碑的意義。
- 通過@PathVariable可以將URL中佔位符引數繫結到控制器處理方法的入參中:URL中的{xxx}佔位符可以通過@PathVariable(“xxx”)繫結到操作方法的入參中。
REST
- REST:即 Representational State Transfer。(資源)表現層狀態轉化。是目前最流行的一種網際網路軟體架構。它結構清晰、符合標準、易於理解、擴充套件方便,所以正得到越來越多網站的採用。
- 資源(Resources):網路上的一個實體,或者說是網路上的一個具體資訊。它可以是一段文字、一張圖片、一首歌曲、一種服務,總之就是一個具體的存在。可以用一個URI(統一資源定位符)指向它,每種資源對應一個特定的 URI 。要獲取這個資源,訪問它的URI就可以,因此 URI 即為每一個資源的獨一無二的識別符。
- 表現層(Representation):把資源具體呈現出來的形式,叫做它的表現層(Representation)。比如,文字可以用 txt 格式表現,也可以用 HTML 格式、XML 格式、JSON 格式表現,甚至可以採用二進位制格式。
- 狀態轉化(State Transfer):每發出一個請求,就代表了客戶端和伺服器的一次互動過程。HTTP協議,是一個無狀態協議,即所有的狀態都儲存在伺服器端。因此,如果客戶端想要操作伺服器,必須通過某種手段,讓伺服器端發生“狀態轉化”(State Transfer)。而這種轉化是建立在表現層之上的,所以就是 “表現層狀態轉化”。具體說,就是 HTTP 協議裡面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET 用來獲取資源,POST 用來新建資源,PUT 用來更新資源,DELETE 用來刪除資源。
– /user/1 HTTP GET :得到 id = 1 的 user
– /user/1 HTTP DELETE:刪除 id = 1的 user
– /user/1 HTTP PUT:更新id = 1的 user
– /user HTTP POST:新增 user
HiddenHttpMethodFilter
HiddenHttpMethodFilter:瀏覽器form表單只支援GET和POST請求,而DELETE和PUT等method並不支援,Spring3.0添加了一個過濾器,可以將這些請求轉換為標準的http方法,使得支援GET、POST、DELETE、PUT請求。
步驟:
- 在web.xml中配置HiddenHttpMethodFilter:將post請求轉換為DELETE或PUT請求。
<!-- 配置HiddenHttpMethodFilter把POST請求轉為DELETE或PUT請求-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 在form標籤內新增 name="_method",value="DELETE"或value="PUT"的input,type屬性設定為hidden.
<form action="testHiddenHttpMethodFilter" method="post">
<input type="hidden" name="_method" value="DELETE">
<br>
UserName: <input type="test" name="userName">
<br>
<input type="submit" value="Submit">
</form>
- 建立處理請求的處理器方法:
@RequestMapping(value = "testHiddenHttpMethodFilter",method = RequestMethod.DELETE)
public String testHiddenHttpMethodFilter(@RequestParam("userName") String userName){
System.out.println("userName:"+userName);
return "success";
}