springmvc項目二RequestMapping註解

1,新建一個web項目,按照【springmvc項目一】的方式搭建好即可。本項目講解關於springmvc的@RequestMapping註解。

2,在新項目的WEB-INF的文件夾中新建一個views的文件夾,然後在views中新建一個success.jsp文件。

在工程目錄下(eclipse默認爲WebContent)新建一個index.jsp。當前的兩個jsp文件暫時沒有其它內容,後面的操作中將逐一添加需要的代碼。

3,新建一個TestRequestMapping的java類(我們將不斷的往該類中添加新的測試方法)。

添加一個testRM()的測試方法。類和方法的代碼如下。

在WEB-INF目錄下新建一個index.jsp文件(後面所有添加的鏈接或者提交都在該頁面中,相應的也會對應類的方法,我們將成對的講述)。

代碼中可以看出,@RequestMapping可以註解類,也可以註解方法。

其註解的意思表示可以通關過類似http://127.0.0.1:8080/web/testRequestMapping/testRM的鏈接來訪問該類的該方法。

其對應的jsp代碼如下,也就是運行本項目,點擊該鏈接就可以調用到testRM()方法。

注意:如果類上沒有給與@RequestMapping註解,那麼訪問是直接跟方法的註解地址即可。

 

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/testRequestMapping")
public class TestRequestMapping {
	
	@RequestMapping("/testRM")
	public String testRM(){
		System.out.println("testRM()...");
		return "success";
	}
}
<a href="testRequestMapping/testRM">test R M</a>

 

 

4,@RequestMapping註解的value和method屬性。相關的java代碼和jsp代碼如下。

value屬性是和上面一樣表示映射的地址,只是如果不用其它的屬性value可以省略不寫。

method屬性的表示,只接受什麼類型的請求。

如下面的案例所示一個get的請求,一個post請求,而註解的方法只接受post的請求。所以當點擊get請求的時候,會反饋給頁面一個405的請求。

關於method的其它請求,我們在REST風格的項目中在行講述。

 

<span style="white-space:pre">	</span>@RequestMapping(value="/testMethod",method=RequestMethod.POST)
	public String testMethod(){
		System.out.println("testMethod()...");
		return "success";
	}
<a href="testRequestMapping/testMethod">testMethod get</a>
	<form action="testRequestMapping/testMethod" method="post">
		<input type="submit" value="testMethod post">
	</form>

5,params屬性

params 支持簡單的表達式:
param1: 表示請求必須包含名爲 param1 的請求參數。
 !param1: 表示請求不能包含名爲 param1 的請求參數。
param1 != value1: 表示請求包含名爲 param1 的請求參數,但其值 不能爲 value1。

使用get和post請求均有效。

案例中表示請求中必須包含name和age的請求參數,而且age不能等於0。

 

	@RequestMapping(value="/testParams",params={"name","age!=0"})
	public String testParams(){
		System.out.println("testParams()..");
		return "success";
	}
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;"></span><pre name="code" class="html"><a href="testRequestMapping/testParams?name=tom&age=18">test Params</a>
	<form action="testRequestMapping/testParams" method="post">
		<input type="text" name="name">
		<input type="text" name="age">
		<input type="submit" value="test Params">
	</form>

 


 

 

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;">5,</span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:14px">headers屬性</span></span>

headers與params一樣也支持上面的表達式。

案例中表示請求頭的Accpet-Encoding和Accept-Language的參數必須與註解的一樣才能相應其請求(案例中是複製chrome的請求頭信息)。

@RequestMapping(value="/testHeaders"
			,headers={"Accept-Encoding=gzip, deflate, sdch","Accept-Language=zh-CN,zh;q=0.8"})
	public String testHeaders(){
		System.out.println("testHeaders()...");
		return "success";
	}
<a href="testRequestMapping/testHeaders">test Headers</a>

6,Ant風格的資源地址

Ant 風格資源地址支持 3 種匹配符:                                                
?:匹配文件名中的一個字符                                                         
*:匹配文件名中的任意字符                                                         
**:** 匹配多層路徑                                                          
@RequestMapping 還支持 Ant 風格的 URL:                                      
/user/*'/'createUser: 匹配  /user/aaa/createUser、 /user/bbb/createUser 等
/user/**'/'createUser: 匹配/user/createUser、 /user/aaa/bbb/createUser 等 
/user/createUser??: 匹配 /user/createUseraa、/user/createUserbb 等 URL    

@RequestMapping("/testAntStyle/**/before")
	public String testAntStyle(){
		System.out.println("testAntStyle()...");
		return "success";
	}

 

<a href="testRequestMapping/testAntStyle/**/before">test AntStyle</a>

7,佔位符參數 @PathVariable

 

通過案例中的方式可以在請求地址中帶入佔位的參數,在方法中使用@PathVariable註解該佔位符即可。(由於是在請求地址中的佔位符,所以必須用GET請求方式)

 

	@RequestMapping(value="/testPathVariable/{id}",method=RequestMethod.GET)
	public String testPathVariable(@PathVariable(value="id")Integer id){
		System.out.println("testPathVariable()... id = "+id);
		return "success";
	}

 

 

 

<a href="testRequestMapping/testPathVariable/23">test PathVariable</a>

8,通過@RequestParam請求來映射方法的請求參數。
 ①RequestParam的參數含義
      value:映射請求的參數名稱,必須兩方保持一致(頁面,映射參數)
     required:表示value的參數是否爲必須,默認爲true。
 defaultValue:賦值給請求參數的默認值(對於post請求基本無效)。
 ②如果參數使用的是int(long、double等等)類型的參數時:
--如果使用post請求,而又沒有值的話,則會報錯,配置defaultValue也無效。
 --如果使用get請求,如果沒有defaultValue="0"參數也會報錯,如果有則不會報錯。
 ③如果參數使用的是Intger,如果沒有傳輸參數時不容易出錯,值爲null(建議使用Integer等包裝類來代替基本數據類型)。

 

 

案例中演示了post請求的方式,你可以自行驗證一下上述的結論。

	@RequestMapping(value="/testRequestParam")
	public String testRequestParam(@RequestParam(value="name")String name
			,@RequestParam(value="age",required=true)/*int*/Integer age){
		System.out.println("testRequestParam()... name="+name+";age="+age);
		return "success";
	}
<span style="white-space:pre">	</span><form method="post" action="testRequestMapping/testRequestParam">
		name:<input type="text" name="name"><br>
		age :<input type="text" name="age"><br>
		<input type="submit" value="test RequestParam">
	</form>

9,關於如果接受 請求頭和cookie信息的方法

 

在方法中使用@RequestHeader註解和@Cookievalue註解,然後標註其value屬性即可得到參數(value可以省略)。

 

<span style="white-space:pre">	</span>@RequestMapping(value="/testRequestHeader")
	public String testRequestHeader(@RequestHeader("Accept-Language")String language){
		System.out.println("testRequestHeader()..."+language);
		return "success";
	}
	
	@RequestMapping("/testCookieValue")
	public String testCookieValue(@CookieValue(value="JSESSIONID")String jessionId){
		System.out.println("testCookieValue()..."+jessionId);
		return "success";
	}
<span style="white-space:pre">	</span><a href="testRequestMapping/testRequestHeader">test RequestHeader</a>
	<br><br>
	
	<a href="testRequestMapping/testCookieValue">test CookieValue</a>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章