你的位置:首页 > Java教程

[Java教程]Spring MVC(一) Spring MVC框架简介以及HTTP请求地址映射


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。