Spring MVC框架簡介
package com.baobaotao.web;
...
@Controller ①將UserController變成一個Handler
@RequestMapping(“/user”) ②指定控制器映射的URL
public class UserController {
@RequestMapping(value = “/register”) ③處理方法對應的URL,相對於
②處的URL
public String register() {
return “user/register”; ④返回邏輯視圖名
}
}
HTTP請求地址映射
通過URL限定:URL表達式
@RequestMapping不但支持標准的URL,還支持Ant風格(即?、*和**的字符)的和帶{xxx}占位符的URL。以下URL都是合法的:
/user/*/createUser 匹配/user/aaa/createUser、/user/bbb/createUser等URL。
/user/**/createUser 匹配/user/createUser、/user/aaa/bbb/createUser等URL。
/user/createUser?? 匹配/user/createUseraa、/user/createUserbb等URL。
/user/{userId} 匹配user/123、user/abc等URL。
/user/**/{userId} 匹配user/aaa/bbb/123、user/aaa/456等URL。
company/{companyId}/user/{userId}/detail 匹配company/123/user/456/detail等的URL。
@RequestMapping("/{userId}")
public ModelAndView showDetail(@PathVariable("userId") String userId){ ①URL中的{xxx}占位符可以通過@PathVariable("xxx")綁定到操作方法的入參中。
ModelAndViewmav= new ModelAndView();
mav.setViewName("user/showDetail");
mav.addObject("user", userService.getUserById(userId));
return mav;
}
@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
@RequestMapping("/pets/{petId}")
public void findPet(@PathVariable String ownerId, ②如果@PathVariable不指定參數名,只有在編譯時打開debug開關(javac -debug=no)時才可行!!(不建議)
@PathVariable String petId, Model model) {
…
}
}
通過請求方法限定:請求方法
1、GET,使用GET方法檢索一個表述(representation)——也就是對資源的描述。多次執行同一GET請求,不會對系統造成影響,GET方法具有冪等性[指多個相同請求返回相同的結果]。GET請求可以充分使用客戶端的緩存。
2、POST方法,通常表示“創建一個新資源”,但它既不安全也不具有冪等性(多次操作會產生多個新資源)。
3、DELETE,表示刪除一個資源,你也可以一遍又一遍地操作它,直到得出結果:刪除不存在的東西沒有任何問題
4、PUT冪等性同樣適用於PUT(基本的含義是“更新資源數據,如果資源不存在的話,則根據此URI創建一個新的資源”)
示例1:
@RequestMapping(value=“/delete”)
public String test1(@RequestParam("userId") String userId){
return "user/test1";
}
-->所有URL為<controllerURI>/delete的請求由test1處理(任何請求方法)
示例2:
@RequestMapping(value="/delete",method=RequestMethod.POST)
public String test1(@RequestParam("userId") String userId){
return "user/test1";
}
-->所有URL為<controllerURI>/delete 且請求方法為POST 的請求由test1處理
通過請求/請求頭參數限定:示例
通過請求參數限定:
@RequestMapping(value="/delete", params="userId")
public String test1(@RequestParam("userId") String userId){
...
}
通過請求頭參數限定:
@RequestMapping(value="/show",headers="content-type=text/*")②
public String test2(@RequestParam("userId") String userId){
...
}
params和headers分別通過請求參數及報文頭屬性進行映射,它們支持簡單的表達式,下面以params表達式為例說明,headers可以參照params進行理解之。
"param1":表示請求必須包含名為param1的請求參數。
"!param1":表示請求不能包含名為param1的請求參數。
"param1!=value1":表示請求包含名為param1的請求參數,但其值不能為value1。
{"param1=value1","param2"}:請求必須包含名為param1和param2的兩個請求參數,且param1參數的值必須為value1。