Spring MVC使用@RequestMapping
注解为控制器
指定可以处理哪些url请求。
@RequestMapping标注出url,它可以标记在类上也可以标记在方法上。
- 标记在类上,提供
初步的
请求映射信息。这个URL相对于WEB应用的根目录。- 标记在方法上,提供进一步的细分映射信息。相对于类定义处的URL。若类定义处未标注@RequestMapping,则方法处标记的URL相对于WEB应用的根目录。
在进行URL请求的时候,必然是请求到方法上的映射,因为类上的映射最多只能为方法映射的URL再增加上一部分相对请求路径。也就是说,类上的URL+方法上的URL=相对于应用的地址。
DispatcherServlet根据注解上url和请求的url进行匹配,匹配上则调用相应的方法进行响应。
如:
@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {
private static final String SUCCESS = "success";
@RequestMapping("/testRequestMapping")
public String testRequestMapping()
{
System.out.println("testRequestMapping");
return SUCCESS;
}
}
这个方法相对于web应用的路径是:/springmvc/testRequestMapping
若web应用的路径是:http://localhost:8080/springmvc
则,该请求的完整路径是:
http://localhost:8080/springmvc/springmvc/testRequestMapping
在使用@RequestMapping注解的时候,只给出一个值的时候,实际上是赋值给了value。
可以在@RequestMapping注解中指定请求类型参数,控制该方法处理哪种请求:
@RequestMapping(value="/testMethod",method= RequestMethod.POST)
public String testMethod()
{
System.out.println("testMethod");
return SUCCESS;
}
用method属性指定请求类型,请求类型在
org.springframework.web.bind.annotation.RequestMethod
中定义:
public enum RequestMethod {
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}
它是个枚举类型。
以上通过method设定了方法响应的请求的类型为POST,这个时候如果以GET方式发起请求,那么该请求将不会被响应:
而POST请求需要以表单提交的时候才能被更改:
<form action="springmvc/testMethod" method="post">
<input type="submit" value="submit"/>
</form>
@RequestMapping的value、method、params、和headers分别表示
请求URL
,请求方法
、请求参数
及请求头
的映射条件,他们之间是与
的关系,联合使用多个条件可让请求映射更加精确化。
params和headers支持简单的表达式:
@RequestMapping(value="/testParamsAndHeaders",params = {"username","age!=10"})
public String testParamsAndHeaders()
{
System.out.println("testParamsAndHeaders");
return SUCCESS;
}
params = {“username”,”age!=10”}: params接受一个数组为参数,数组内容是对请求参数的限制,
“username”:表示请求参数中必须要有username,否则不会响应请求。
“age!=10”: 表示请求参数中的age必须不能等于10,否则不会响应请求,而如果没有age,那么还是会响应的。