1首先@RequestMapping 中的值,咱們說請求方法l路徑,請求url咱們都知道怎麼請求了,在第一節helloworld中,web
咱們先說咱們先建一個類,RequestMappingTest spring
方法以下:瀏覽器
/**
* 1. @RequestMapping 除了修飾方法, 還可來修飾類 2. 1). 類定義處: 提供初步的請求映射信息。相對於 WEB 應用的根目錄
* 2). 方法處: 提供進一步的細分映射信息。 相對於類定義處的 URL。若類定義處未標註 @RequestMapping,則方法處標記的 URL
* 相對於 WEB 應用的根目錄
*/mvc
@RequestMapping("/requestMapping")
public String requestMapping(){
System.out.println("requestMapping()....");
return SUCCESS;
} app
方法名字和@RequestMapping中的值同樣,這裏面能夠有兩種方式:jsp
1當咱們在類中RequestMappingTest 上能夠加註解也能夠不加註解@RequestMappingpost
當咱們加註解的時候好比 @RequestMapping("/springMvc")
學習
那麼咱們超連接的請求方式爲 <a href="springMvc/requestMapping">springMvc/requestMapping</a><br/>測試
若是不加註解 <a href="requestMapping">requestMapping</a><br/> ui
2.咱們可使用 method 屬性來指定請求方式
@RequestMapping(value = "/testMethod", method = RequestMethod.POST)
public String testMethod() {
System.out.println("testMethod");
return SUCCESS;
}
那麼咱們超連接的請求方式爲
<!--由於被註解是Post請求,自己請求是get,因此請求不到 -->
<a href="springMvc/testMethod">springMvc/testMethod</a><br/>
這樣是錯誤的,正確的方法是要post請求,那麼咱們能夠建一個表單
<form action="springMvc/testMethod" method="post">
<input type="submit">
3.可使用 params 和 headers 來更加精確的映射請求. params 和 headers 支持簡單的表達式
/**
* 可使用 params 和 headers 來更加精確的映射請求. params 和 headers 支持簡單的表達式.
*
* @return
*/
@RequestMapping(value = "testParamsAndHeaders", params = { "username",
"age!=10" }, headers = { "Accept-Language=en-US,zh;q=0.8" })
public String testParamsAndHeaders() {
System.out.println("testParamsAndHeaders");
return SUCCESS;
}
那麼咱們超連接的請求方式爲
<a href="springmvc/testParamsAndHeaders?username=atguigu&age=10">Test ParamsAndHeaders</a>
<br><br> ,headers中的Accept-Language=en-US,zh;q=0.8,咱們能夠用火狐瀏覽器按F12能夠看到,這個是http協議中
的請求頭中的內容,咱們也能夠指定其餘的,咱們看下這個超連接確定是錯誤的,由於咱們方法中設置的是age!=10,而咱們是age=10
因此,改過了就能夠咯
4@PathVariable 能夠來映射 URL 中的佔位符到目標方法的參數中.
/**
* @PathVariable 能夠來映射 URL 中的佔位符到目標方法的參數中.
* @param id
* @return
*/
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id) {
System.out.println("testPathVariable: " + id);
return SUCCESS;
}
咱們超連接的請求方式爲 :
<a href="springMvc/testPathVariable/101">springMvc/testPathVariable/101</a><br/>
5@RequestMapping 還 支持 Ant 格 URL
@RequestMapping("/testAntPath/*/abc")
public String testAntPath() {
System.out.println("testAntPath");
return SUCCESS;
}
咱們超連接的請求方式爲 :
<a href="springMvc/testAntPath/ddd/abc">springMvc/testAntPath</a><br/>,ddd的值能夠是任意的
6.咱們來講下rest
咱們能夠先建一個jsp代碼以下:
<form action="springMvc/testRestPut/1" method="Post">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="testRestPut">
</form><br>
<form action="springMvc/testRestDelete/1" method="Post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="testRestDelete">
</form><br>
<form action="springMvc/testRestPost/1" method="Post">
<input type="submit" value="testRestPost">
</form><br>
<a href="springMvc/testRestGet/1">testRestGet</a><br/>
咱們用方法來測試一下:
@RequestMapping(value="/testRestPut/{id}",method=RequestMethod.PUT)
public String testRestPut(@PathVariable Integer id){
System.out.println("testRestPut()..."+id);
return SUCCESS;
}
@RequestMapping(value="/testRestDelete/{id}",method=RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id){
System.out.println("testRestDelete()..."+id);
return SUCCESS;
}
@RequestMapping(value="/testRestPost/{id}",method=RequestMethod.POST)
public String testRestPost(@PathVariable Integer id){
System.out.println("testRestPost()..."+id);
return SUCCESS;
}
@RequestMapping("/testRestGet/{id}")
public String testRestGet(@PathVariable Integer id){
System.out.println("testRestGet()..."+id);
return SUCCESS;
}
一一跟上面對應,咱們來講明一下,咱們知道原本就只有get,post請求,get,post請求咱們就不說了
如何將post請求轉換成DELETE,和PUT呢,咱們要建一個表單,這樣才能是post請求,
若是要轉換,那麼咱們要在表單中加入隱藏域,name屬性必須爲 _method,value的值能夠是
DELETE,PUT,爲何是這樣呢,咱們要有個關鍵的細節沒作,作了在說;咱們要在web.xml中加入
<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>
,咱們能夠看下HiddenHttpMethodFilter 的源碼,Alt +Shirt+T 進入後大家看到有個常量是_method,
因此隱藏域中的name屬性必須是name屬性必須爲 _method,value是post要轉換成的值,源碼有興趣的朋友
能夠看下,value大小寫都不要緊,源碼中會所有轉換成大寫,
這樣咱們用@PathVariable註解就能夠傳入參數,這樣咱們就能夠進行CRUD了,之前咱們學習
webservlet的時候 通常都是delete?id=1 這樣,如今不用這樣,這樣很方便,今天咱們就講到這裏。
但願看我博客的朋友繼續關注哦,我會把全部學習到的知識所有更在博客上。