Spring MVC(三)

9.请求映射
假设浏览器发送了一个请求如下:
-------------------------------
POST /login HTTP1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,en;q=0.8,zh;q=0.5,en-US;q=0.3
Connection: keep-alive
Cookie: JSESSIONID=DBC6367DEB1C024A836F3EA35FCFD5A2
Host: 127.0.0.1:8989
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0

username=tom&password=123
--------------------------------

http协议的请求格式如下:
---------------------------------
请求方法 URL 协议版本号
请求头信息
请求头信息
请求头信息
..
回车换行
请求正文
---------------------------------

从格式中我们可以看到【请求方法、URL、请求头信息、请求正文】这四部分一般是可变的,因此我们可以把请求中的这些信息在处理器的【功能处理方法】中进行的映射,因此请求的映射分为如下几种:
URL路径映射
使用URL映射到处理器的功能处理方法;
请求方法映射限定
例如限定功能处理方法只处理GET请求;
请求参数映射限定
例如限定只处理包含username参数的请求;
请求头映射限定
例如限定只处理"Accept=application/json"的请求。

10.URL路径映射
1)普通URL路径映射
@RequestMapping(value="/test")
@RequestMapping("/hello")
注解中只出现一个参数且参数名为value的话,可以将参数名去掉
@RequestMapping(value={"/test", “/user/hello”})
多个URL路径可以映射到同一个处理器的功能处理方法。

2)URI模板模式映射
@RequestMapping(value="/users/{userId}")
{XXX}占位符,得写, 请求的URL可以是"/users/123456"或"/users/abcd",之后可以通过@PathVariable可以提取URI模板模式中的{XXX}中的值
@RequestMapping(value="/users/{userId}/create")
这样也是可以的,请求的URL可以是"/users/123/create"
@RequestMapping(value="/users/{userId}/topics/{topicId}")
这样也是可以的,请求的URL可以是"/users/123/topics/123"

3)Ant风格的URL路径映射
@RequestMapping(value="/users/")
可以匹配"/users/abc/abc",但"/users/123"将会被【URI模板模式映射中的"/users/{userId}“模式优先映射到】
@RequestMapping(value=”/product/?")
可匹配"/product/1"或"/product/a",但不匹配"/product"或"/product/aa";
?代表有且只有一个字符
@RequestMapping(value="/product*")
可匹配"/productabc"或"/product",但不匹配"/productabc/abc";
代表0~n个字符
@RequestMapping(value="/product/
")
可匹配"/product/abc",但不匹配"/productabc";
@RequestMapping(value="/products/
/{productId}")
可匹配"/products/abc/abc/123"或"/products/123",也就是Ant风格和URI模板变量风格可混用;
**代表所有的子路径

4)正则表达式风格的URL路径映射
从Spring3.0 开始支持正则表达式风格的URL路径映射,格式为{变量名:正则表达式},之后通过@PathVariable可以提取{XXX:正则表达式匹配的值}中的XXX这个变量的值。

	@RequestMapping(value="/products/{categoryCode:\\d+}-{pageNumber:\\d+}")
		可以匹配"/products/123-1",但不能匹配"/products/abc-1",这样可以设计更加严格的规则。
	@RequestMapping(value="/user/{userId:^\\d{4}-[a-z]{2}$}")
		可以匹配"/user/1234-ab"

	注意:\d表示数字,但是\在java的字符串中是特殊字符,所以需要再加一个\进行转义即可
	(参照之前js的学习文档,和java的正则几乎一致,js正则中的一个/变为java中的俩个/即可)
		括号:
			[abc] 	查找方括号之间的任何字符。
			[^abc] 	查找任何不在方括号之间的字符。
			[0-9] 	查找任何从 0 至 9 的数字。
			[a-z] 	查找任何从小写 a 到小写 z 的字符。
			[A-Z] 	查找任何从大写 A 到大写 Z 的字符。
			[A-z] 	查找任何从大写 A 到小写 z 的字符。
			(red|blue|green) 	查找任何指定的选项。

		元字符:
			. 	查找单个任意字符,除了换行和行结束符.如果要表示.这个字符,需要转义
			\w 	查找单词字符。     字母 数字 _
			\W 	查找非单词字符。非 字母 数字 _
			\d 	查找数字。
			\D 	查找非数字字符。
			\s 	查找空白字符。
			\S 	查找非空白字符。
			\b 	匹配单词边界。
			\B 	匹配非单词边界。
			\0 	查找 NUL 字符。
			\n 	查找换行符。
			\f 	查找换页符。
			\r 	查找回车符。
			\t 	查找制表符。
			\v 	查找垂直制表符。

		量词:
			n+ 		匹配任何包含至少一个 n 的字符串。
			n* 		匹配任何包含零个或多个 n 的字符串。
			n? 		匹配任何包含零个或一个 n 的字符串。
			n{X} 	匹配包含 X 个 n 的序列的字符串。
			n{X,Y} 	匹配包含 X 到 Y 个 n 的序列的字符串。
			n{X,} 	匹配包含至少 X 个 n 的序列的字符串。
			n$ 		匹配任何结尾为 n 的字符串。
			^n 		匹配任何开头为 n 的字符串。
			?=n 	匹配任何其后紧接指定字符串 n 的字符串。
			?!n 	匹配任何其后没有紧接指定字符串 n 的字符串。


	正则表达式风格的URL路径映射是一种特殊的URI模板模式映射
	URI模板模式映射不能指定模板变量的数据类型,如是数字还是字符串;
	正则表达式风格的U
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值