springMVC笔记系列(5)——@RequestMapping请求value的通配符详解
来源:互联网 发布:英国 实力 知乎 编辑:程序博客网 时间:2024/06/05 19:53
在一些场景中,请求的url可能是符合一定模式的多个值,这时候需要使用Ant 风格通配符来进行限定。
Ant 风格资源地址支持 3 种匹配符:
- 1
- 2
–?:匹配文件名中的一个字符
– *:匹配文件名中的任意字符
– 两个星花: ** 匹配多层路径
@RequestMapping 还支持 Ant 风格的 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
(本文出自http://my.oschina.net/u/1156339/blog/412714)
这个似乎没什么难的,现在我们来看看一些例子。这些例子分成几组,分别说明当通配符的url请求满足多个控制器方法的RequestMapping条件时,会映射到哪一个方法上?
请求页面如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
显示出来:
我们将上面五组请求对应的通配符标记了出来,并写出相应的控制器方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
那么,我们来看看结果和结论吧:
第1组实验:
一个请求:c3/rq3/aaa/bbb/hhh
对于两个通配符请求url: rq3// 和 rq3//hhh
结果是rq3/**/hhh显示的页面robot_baymax1.jsp。
结论: 当springmvcDispatchServlet会选择映射范围更小、更具体的url来进行映射。
第2组实验:
(A)请求:c3/rq4/aaa/bbb
通配符请求url:rq4/*/bbb
(B)请求:c3/rq5/aaa/bbb
通配符请求url:rq5/**/bbb
连个请求是类似的,但映射到的物理视图的情况截然不同。
(A)结果:
(B)结果:
这是因为符合(A)请求c3/rq4/aaa/bbb 的由两个方法的RequestMapping通配符,rq4//bbb和 rq4/*/bbb
这时候,的优先级会高于*的通配符。
第3组实验:
(A)请求:c3/rq6/qqqw
通配符请求url:rq6/qqq*
(B)请求:c3/rq7/qqqw
通配符请求url:rq7/qqq*
连个请求是类似的,但映射到的物理视图的情况截然不同。
(A)结果:
(B)结果:
结论:当请求url两个都符合时,含有?的映射优先级高于含有*的。
大结论:至此,我们可以得到,相同位置相同个数的含有一个通配符,优先级由高到低:? * **
第4组实验:
(A)请求:c3/rq8/aaa/kkk
通配符请求url:rq8//kkk or rq8/aaa/
(B)请求:c3/rq8_bm/bbb/mmm
通配符请求url:rq8_bm/bbb/* rq8_bm/*/mmm
目的:看看相同的通配符在不同位置的请求url的映射情况。
结果:
(A)
(B)
结论:映射优先级与通配符位置无关,当两个RequestMapping通配符url差别仅仅是位置差别时,映射结果是随机的。
(这里的实验也出现过两个baymax2)
第5组实验:
(A)请求:c3/rq9/aaa/kkk/nnn
通配符请求url:rq9//kkk/nnn or rq9/aaa//*
(B)请求:c3/rq10/aaa/kkk/nnn
通配符请求url:rq10/aaa// or rq10/*/kkk/nnn
目的:看看相同的通配符在个数不同请求url的映射情况。
结果:
(A)
(B)
结论:通配符个数少的RequestMapping的value更高优先级。
- springMVC笔记系列(5)——@RequestMapping请求value的通配符详解
- springMVC笔记系列(5)——@RequestMapping请求value的通配符详解
- SpringMVC笔记系列(3)——@RequestMapping请求value和method属性
- SpringMVC笔记系列(2)——@RequestMapping请求映射物理视图解析
- springmvc的requestmapping参数详解
- springMVC笔记系列(4)——RequestMapping映射特定params和headers
- SpringMVC使用(一)——@RequestMapping处理请求
- SpringMVC使用(一)——@RequestMapping处理请求
- springmvc@RequestMapping的method请求方式
- springmvc @RequestMapping映射请求
- springmvc学习笔记(2)——RequestMapping
- SpringMVC RequestMapping 参数详解
- SpringMVC RequestMapping注解详解
- SpringMvc中@RequestMapping详解
- SpringMVC中@RequestMapping详解
- SpringMVC RequestMapping用法详解
- sprinmvc之@requestMapping映射请求通配符
- SpringMVC学习笔记-@RequestMapping
- JavaScript中的DOM简介及应用
- 贝叶斯思维——chapter5(胜率和加数)
- 072day(输出前k大的数的尝试)
- JDBC-java与数据库的连接
- 在学习泛型中遇到的多态的一个小问题
- springMVC笔记系列(5)——@RequestMapping请求value的通配符详解
- 表单提交中get和post方式的区别
- 如何在tomcat里为多个应用配置不同的访问端口
- java反射机制判断对象所有属性是否全部为空
- http常见状态码以及其代表的含义
- 操作系统学习指南(一)
- Android热修复(一):Tinker的使用(一)命令行接入
- mybatis批量update(mysql)
- git 分支合并问题:refusing to merge unrelated histories