Spring MVC 基于URL的映射规则(注解版)
作者:xingoo 发布时间:2021-05-23 15:05:09
好几天没有跟进Spring MVC的学习了,之前看了点源码都忘的差不多了。这次就跟着之前的问题,继续总结下Spring MVC中的小知识。
url-pattern
如果看过前一篇入门的帖子,应该了解到spring mvc在启动前必须要在web.xml中配置servlet,这样才能拦截到想要映射的url地址。
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
其中servlet配置了servlet的实现类,而servlet-mapping则定义了spring mvc起作用的url模式,常见的配置有三种:
/ 这个斜杠,表示拦截所有的url,如/test,/test.html
/* 这个模式包含/,可以多拦截以*.jsp结尾的url
*.xxx 这个拦截固定结尾的url,常见的如*.do,*.json等等
RequestMapping()
基于注解风格的Spring MVC就是通过这个方法来定义映射的url的,常使用的方式如下:
基于普通的url
这种是最简单的url映射,可以接收到localhost:8080/contextName/hello这样的请求
@RequestMapping("/hello")
public @ResponseBody String test() {
return "hello!";
}
基于多个普通的url路径
RequestMapping可以同时指定多个url,映射到同一个应答逻辑中:
//普通的url路径映射
@RequestMapping(value={"/multi1","/multi2","/test/multi"})
public @ResponseBody String multiUrl() {
return "test multi url";
}
基于路径变量的URL映射
这种URL映射可以直接在路径上指定变量,通过@PathVariable可以获得对象。
//基本的URL模板映射
@RequestMapping(value="/user1/{name}")
public @ResponseBody String basicUrl1(@PathVariable String name){
return "hello"+name;
}
@RequestMapping(value="/user2/{name}/test")
public @ResponseBody String basicUrl2(@PathVariable String name){
return "hello"+name+"test";
}
@RequestMapping(value="/user1/{name}/test/{age}")
public @ResponseBody String basicUrl3(@PathVariable String name,@PathVariable int age){
return "hello"+name+" age"+age;
}
基于通配风格的url映射
第一种:
@RequestMapping(value="/ant1?")
public @ResponseBody String ant1(){
return "ant1?";
}
支持下面风格:
localhost:8080/context/ant12 或者localhost:8080/context/ant1a
第二种:
@RequestMapping(value="/ant2*")
public @ResponseBody String ant2(){
return "ant2*";
}
支持下面风格:
localhost:8080/context/ant2aaaa 或者localhost:8080/context/ant2
第三种:
@RequestMapping(value="/ant3/*")
public @ResponseBody String ant3(){
return "ant3/*";
}
支持下面风格:
localhost:8080/context/ant3/aaaa 或者localhost:8080/context/ant3/123
第四种:
@RequestMapping(value="/ant4/**")
public @ResponseBody String ant4(){
return "ant4/**";
}
支持下面风格
localhost:8080/context/ant4/ 或者localhost:8080/context/ant4/aaa 或者localhost:8080/context/ant4/aaa/123
混用统配和路径变量
//混用
@RequestMapping(value="/ant5/**/{name}")
public @ResponseBody String ant5(@PathVariable String name){
return "ant+url "+name;
}
它能匹配
localhost:8080/context/ant5/123 或者localhost:8080/context/ant5/aaa/123 或者localhost:8080/context/ant5/aaa/123/test
最后一个会被当做name值
基于正则的url映射
这个比较有意思,它支持{名称:正则表达式}的写法,以另一种风格限制url的映射。
//正则表达式
@RequestMapping(value="/student/{name:\\w+}-{age:\\d+}")
public @ResponseBody String regUrl(@PathVariable String name,@PathVariable int age){
return "name:"+name+" age:"+age;
}
例如上面的URL就只能匹配如:
localhost:8080/context/student/wangwu-33 或者localhost:8080/context/student/zhao4-22
来源:http://www.cnblogs.com/xing901022/p/5263702.html


猜你喜欢
- Random类介绍Random类一个用于产生 伪随机 数字的类。这里的伪随机表示有随机性但是可以基于算法模拟出随机规律。Random类的构造
- 一、方法这里我们用两种方法来实现跑马灯效果,虽然实质上是一种实质就是:1、TextView调出跑马灯效果2、TextView获取焦点&nbs
- 本文实例为大家分享了Android实现手机自动获取短信验证码功能,供大家参考,具体内容如下1、短信监听广播2、读取短信内容3、截取短信内容【
- 在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备
- java生成json时产生栈溢出错误环境java + hibernate +html本来,java中使用json事件很正常的事,但小心有的地
- 委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。同步调用的例子:
- 在MailSetting里的配置好邮件服务器,然后MailEntity里配置好要发送的邮件主体,最后使用MailServer里的方法Send
- 一、水平分表当业务需求的数据量过大时,一个表格存储数据会非常之多,故时长采用水平分表的方式来减少每张表的数据量即是提升查询数据库时的效率。水
- 当我们开发spring web应用程序时,对于如 IOException , ClassNotFoundException 之类的检查异常,
- 本文为大家分享了Tablayout简单的使用方法,供大家参考,具体内容如下一、TabLayout普通用法在项目中使用viewpager的时候
- 一、简介正则表达式是一种匹配输入文本的模式,.Net 框架提供了允许这种匹配的正则表达式引擎,模式由一个或多个字符、运算符和结构组成。下面列
- 本文实例讲述了C#实现基于Base64的加密解密类。分享给大家供大家参考。具体如下:这个C#类是一个基于Base64的加密和解密类,用户可以
- 一、 * 与过滤器在讲Spring boot之前,我们先了解一下过滤器和 * 。这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较
- intellij idea是一款非常优秀的软件开发工具,它拥有这强大的插件体系,可以帮助开发者完成很多重量级的功能。今天,我们来学习一下如何
- Objects工具类jdk 1.7引进的工具类,都是静态调用的方法,jdk 1.8新增了部分方法重点方法equals用于字符串和包装对象的比
- 一、项目概述之前有不少粉丝私信我说,能不能用Android原生的语言开发一款在手机上运行的游戏呢?说实话,使用java语言直接开发游戏这个需
- 前言之前我们在浅谈6个成员函数中有提到深浅拷贝的问题,现在再回首掏一把。一、深浅拷贝哪家强?先给出代码理一理#define _CRT_SEC
- 一.方法的基本使用1.什么是方法方法是一个代码片段,类似于C语言中的函数2.方法基本语法基本语法 // 方法定义
- 开窗函数能在每行的最后一行都显示聚合函数的结果,所以聚合函数可以用作开窗函数聚合函数和开窗函数聚合函数是将多行变成一行,如果要显示其他列,必
- 本文研究的主要是Spring+Junit4进行接口测试的一个相关实例,具体实现代码如下。1.配置pom.xml<dependency&