@RequestMapping
- 这个注解我们前面已经了解过了,是映射url的重要注解
- value:定义处理url的请求地址
- value属性支持正则表达式
- 或关系
- 通配符、占位符
- method:处理http的请求方法
- params:定义url请求中参数的要求
- headers
- consums
- produces
params参数
@Controller
public class Controller_1 {
/*@RequestMapping(value="/find.action",params="name")
public String find1() {
System.out.println("find1");
return "result";
}
@RequestMapping(value="/find.action",params="!name")
public String find2() {
System.out.println("find2");
return "result";
}*/
@RequestMapping(value="/find.action",params="name=zhangsan")
public String find3() {
System.out.println("find3");
return "result";
}
@RequestMapping(value="/find.action",params="name!=zhangsan")
public String find4() {
System.out.println("find4");
return "result";
}
}
- 这里有四个方法,分别的作用如下
- 包含name参数
- 不包含name参数
- 包含name参数,并且name参数的值等于zhangsan
- 包含name参数,但name参数的值不等于zhangsan
- 但是这里需要注意一下,如果请求,有可能会比配两个方法哦,例如如果 传递的方法是 “name=lisi”,那么这个就会比配到包含name,也会比配到包含name但是值不等于zhangsan,所以会出错
value的占位符
-
占位符和通配符有 “ * ”,“ ? ”,“ ** ”
@Controller public class Controller_2 { @RequestMapping("/find.action") public String method1() { System.out.println("find.action"); return "result"; } @RequestMapping("/find/id*.action") public String method2() { System.out.println("find/id*.action"); return "result"; } @RequestMapping("/find/id?.action") public String method3() { System.out.println("find/id?.action"); return "result"; } @RequestMapping("/find/id/*.action") public String method6() { System.out.println("find/id/*.action"); return "result"; } @RequestMapping("/find/id/**/id.action") public String method7() { System.out.println("find/id/**/id.action"); return "result"; } } <a href="find.action">find.action</a><br> <a href="find/id.action">find/id.action</a><br> <a href="find/ida.action">find/ida.action</a><br> <a href="find/id1.action">find/id1.action</a><br> <a href="find/idaa.action">find/idaa.action</a><br> <a href="find/id/idd.action">find/id/idd.action</a><br> <a href="find/id/idd/id.action">find/id/idd/id.action</a><br>
以下是输出:
find4
find/id*.action
find/id?.action
find/id?.action
find/id*.action
find/id/*.action
find/id/**/id.action
- 这里可以看出“ ** ”是比配任何路径
- 注意这里最后是以/id结尾的哦,这个不能错了
- ?只是一个符号的占位符
value的正则表达式以及或关系
@Controller
public class Controller_3 {
@RequestMapping(value= {"/get.action","/get/py.action"})
public String get() {
System.out.println("帅帅哒");
return "result";
}
@RequestMapping("/get/{num:\\d{3}}-{text:[a-z]{3}}.action")
public String get520(@PathVariable String num,@PathVariable String text) {
System.out.println(num+text);
return "result";
}
@RequestMapping("/get/{type}.action")
public String Manger(@PathVariable String type) {
System.out.println(type);
return "result";
}
}
<a href="get.action">get</a><br>
<a href="get/py.action">get/py</a><br>
<a href="get/520-you.action">get/520-you</a><br>
- 这里很容易看出或关系的作用,就是两个路径都可以访问同一个请求
- {type}参数是一个类型,我们可以直接打印,一般用于增删改之类的,前缀一样
- 正则表达式,这里也很简单,同时我们还可以打印
/{num:\\d{3}}-{text:[a-z]{3}}
这个的意思就是 至少3个数字,然后这个值的名字是num;[a-z]是至少三个字母,名字是text,然后就可以对应打印了