1. 程式人生 > 其它 >三、SpringMVC--@PathVariable 對映 URL 繫結的佔位符

三、SpringMVC--@PathVariable 對映 URL 繫結的佔位符

技術標籤:SpringMVCspringmvc

@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請求。
步驟:

  1. 在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>

  1. 在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>
  1. 建立處理請求的處理器方法:
  @RequestMapping(value = "testHiddenHttpMethodFilter",method = RequestMethod.DELETE)
    public String testHiddenHttpMethodFilter(@RequestParam("userName") String userName){
        System.out.println("userName:"+userName);
        return "success";
    }