一、使用@RequestMapping映射请求
Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求,该注解可以在控制器类定义和方法定义处使用。
- 类定义处:提供初步的请求信息,相对于web应用请求的根目录
- 方法处:提供进一步细分的请求信息,相对于类定义处目录(若类定义处未标注则此处相对于web应用根目录)
DispatcherServlet(前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处)截获请求后就通过控制器上@RequestMapping提供能的请求信息确定具体的处理方法。
1.1 请求参数、请求方法、请求头
@RequestMapping除了可以使用请求URL映射请求外,还可以使用请求方法、请求参数、请求头映射请求。他们之间是与的关系,联合使用可以使请求更加细化。
value:请求URL
method:请求方法RequestMethod(GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE)
param:请求参数
- param1:表示请求必须包含param1这个请求参数
- !param1:表示请求必须不能包含param1这个请求参数
- param1 != value1:表示请求必须包含param1这个请求参数,但是其值不能等于value1
- {“param1=value1”, “param2”}:请求必须包含param1和param2两个参数,param1必须等于value1
headers:请求头
1.2 模糊匹配
springmvc使用Ant风格资源地址进行模糊匹配
?:匹配一个字符
*:匹配任意字符
**:匹配多层路径
二、获取请求参数
Spring MVC 通过分析处理方法的签名,将HTTP请求信息绑定到处理方法的相应入参中。
2.1 @PathVariable映射URL绑定的占位符
带占位符的URL是SpringMVC3.0新增的功能,该功能是SpringMVC向REST目标挺近发展过程中具有里程碑的意义。
通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:URL中的 {xxx} 占位符可以通过 @PathVariable(“xxx”) 绑定到操作方法中入参。
@RequestMapping("/delete/{id}")
public String delete(@PathVariable("id") String id) {
System.out.println("id");
return "success";
}
2.2 @RequestParam 绑定请求参数值
在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法。
- value:参数名
- required:是否必须,默认true。表示请求参数必须包含对应的参数,否则将抛出异常。
@RequestMapping("/handle")
public String handle(@RequestParam(value="username") String username,
@RequestParam(value="age", required=false) int age) {
System.out.println(username);
return "success";
}
2.3 @RequestHeader 绑定请求报头的属性值
请求头包含了若干个属性,服务器可据此获取客户端的信息,通过@RequestHeader 即可将请求头中的属性值绑定到处理方法中入参。
@RequestMapping("/handle1")
public String handle1(@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") long alive) {
return "success";
}
2.4 @CookieValue 绑定请求中的Cookie值
@RequestMapping("/handle2")
public String handle2(@CookieValue(value="JSESSIONID", required=false) String sessionId,
@RequestParam("age") int age) {
return "success";
}
2.5 使用实体类(POJO)绑定请求参数
Spring MVC 会按请求参数名和 实体类属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。如:dept.deptId, dept.address.tel
@RequestMapping("/pojoParams")
public String pojoParams(User user){
System.out.println(user);
return "helloworld";
}
2.6 使用ServletAPI入参
MVC 的Handler方法可以接受以下9种类型的ServletAPI入参
- javax.servlet.ServletRequest
- javax.servlet.ServletResponse
- javax.servlet.http.HttpSession
- java.security.Principal
- java.util.Locale
- java.io.InputStream
- java.io.Reader
- java.io.OutputStream
- java.io.Writer