首先,看一个例子,以下是一个网站中7个网页的URL请求:
1、首页
<script src="http://localhost:8180/api/demo_index_index/pv.html"></script>
2、体育首页
<script src="http://localhost:8180/api/demo_sport_index/pv.html"></script>
3、体育页面1
<script src="http://localhost:8180/api/demo_sport_1/pv.html"></script>
4、体育页面2
<script src="http://localhost:8180/api/demo_sport_2/pv.html"></script>
5、音乐首页
<script src="http://localhost:8180/api/demo_music_index/pv.html"></script>
6、音乐页面1
<script src="http://localhost:8180/api/demo_music_1/pv.html"></script>
7、音乐页面2
<script src="http://localhost:8180/api/demo_music_2/pv.html"></script>
我们很容易发现这些URL请求中均包含了大量相同重复的地方,这种具有大量重复的URL请求我们称之为具有相同模式的URL。针对这种URL,很显然,我们不能为这7个请求各写一个@RequestMapping注解的方法来处理其请求,但是我们可以在@RequestMapping中用{}来声明它们URL中的变量。
如上图所示,{resCode}只是声明了我们定义的一个URL变量,那么现在如何去获取这个URL变量resCode中具体存放的值呢?这就需要用到@PathVariable注解了。由于login方法中的用@PathVariable注解的resCode参数和URL变量resCode是同名的,所以spring会自动为resCode参数进行赋值,将resCode参数的值设置为URL的具体值。
其实这里还有一种写法,即:
@PathVariable("resCode") final String resCode
以上写法指定了具体的URL变量,即指定了具体要将哪个URL变量赋@PathVariable注解过的参数,这样也能获取resCode的值。
获取到了resCode的值,也就相当于获取到了用户URL请求中的“个性”部分,也就达到了区分是哪个用户发出请求的目的。
例如,还是拿上面的例子:
1、首页的URL:
首页的resCode:demo_index_index
2、体育首页的URL:
体育首页的resCode:demo_sport_index
3、体育页面1的URL:
体育页面1的resCode:demo_sport_1
4、体育页面2的URL:
体育页面2的resCode:demo_sport_2
5、音乐首页的URL:
音乐首页的resCode:demo_music_index
6、音乐页面1的URL:
音乐页面1的resCode:demo_music_1
7、音乐页面2的URL:
音乐页面2的resCode:demo_music_2