Springmvc之RequestMapping
Springmvc之RequestMapping
RequestMapping
-
标记客户的请求与哪一个类和方法对应
-
使用
@RequestMapping
同时对类和方法进行注解,相当于最终将这两处的注解路径拼接起来,比如类上使用@RequestMapping("/user")
,在方法上使用@RequestMapping("/login.do")
,那么拼接时访问的路径为http://localhost:8080/ProjectName/user/login.do
属性
-
value
: 默认的属性,表示映射的地址,如果只有这一个属性,那么默认可以不写value,比如@RequestMapping("/login.do")
和@RequestMapping(value="/login.do")
是一样的效果 -
method
:指定是请求的方式,我们知道请求的方式有post
,get
,put
,delete
。一般常用的是post,get,一旦我们在其中定义这个method属性,那么如果请求的方式不是这个method指定的属性值,那么就不会访问到这个方法。-
其实只要不指定这个
method
属性,无论是post还是get方式的都会执行这个方法,只有当其设置了method
属性才会做限定 -
比如我们使用了
@RequestMapping(value="login.do",method=RequestMethod.GET)
,但是我们使用表单提交的是<form action="<%=request.getContextPath%>/project/user/login.do" method="post"></form>
,那么这个表单的请求就不会对应上面的注解的方法,因为表单的提交方式是post
,但是RequestMapping定义的是method
是get
方式,会响应405错误
-
-
params
: params是用来指定请求中包含的参数,其中的值是一个字符串数组的形式,并且这个还支持简答的表达式-
param
: 表示请求参数中必须包含param
这个参数至于为其赋予的值可以随便,但是必须包含这个字段 -
param!=value
: 表示请求参数中必须包含param这个参数,但是为其赋予的值不能等于value这个值,其他的什么值都是可以的 -
!param
:表示请求参数中一定不能包含这个param字段,如果包含这个字段,那么将不能映射到这个地址 -
{“param1”,“param2”}
: 指定请求参数中必须包含着两个请求参数,至于为其赋什么值随便
-
/*
* 请求的参数中必须不能包含name属性,age必须不能等于12,必须包含sex,address必须等于xuzhou
*/
@RequestMapping(value="/testParams",params={"!name","age!=12","sex","address=xuzhou"})
public String testParams(){
System.out.println("testParams");
return SUCCESS;
}
-
headers
:headers
和params
同样是支持简单的表达式,同样是一个字符串数组,这里一样的是适用于上面的表达式
/*
* 请求的参数中必须不能包含name属性,age必须不能等于12,必须包含sex,address必须等于xuzhou
* 请求头中的Accept-Language不能等于zh-CN,zh;q=0.8
*/
@RequestMapping(value="/testParams",params={"!name","age!=12","sex","address=xuzhou"},headers={"Accept-Language!=zh-CN,zh;q=0.8"})
public String testParams(){
System.out.println("testParams");
return SUCCESS;
}
RequestMapping支持Ant风格的通配符
- 在学习struts2中的时候也是支持通配符调用的,比如_等。现在springmvc中也是支持通配符风格的,但是只支持Ant风格的,如下:
-
?
: 表示一个任意的字符 springmvc/testAnt?可以使用
springmvc/testAnta`这个地址来访问,其中最后一个a可以替换成任意的字符 -
*
: 表示支持多个任意的字符/spingmvc/testAnt/*
可以使用springmvc/testAnt/aaaaa
这个地址来访问,其中最后一层的路径可以使用任意的字符串替换 -
**
: 匹配多层路径/springmvc/testAnt/**
可以使用/springmvc/testAnt/user/test
这个来访问,当然也可以是多层的路径
-
/*
* 这里的* 表示支持任意多个字符,因此这里可以使用:springmvc/testAnt/user这个地址来访问,其中最后一层use可以写成任意的字符串即可
*
*/
@RequestMapping(value="/testAnt/*",method=RequestMethod.GET)
public String testAnt(){
System.out.println("testAnt");
return SUCCESS;
}