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。