通过@RequestMapping 注解可以定义处理器对于请求的映射规则。
该注解可以注解在方法上,也可以注解在类上,但意义是不同的。
value 属性值常以“/”开始。
@RequestMapping 的 value 属性用于定义所匹配请求的 URI。
一个@Controller 所注解的类中,可以定义多个处理器方法。
不同的处理器方法所匹配的 URI 是不同的。这些不同的 URI 被指定在注解于方法之上的@RequestMapping 的value 属性中。但若这些请求具有相同的 URI 部分,则这些相同的 URI部分可以被抽取到注解在类之上的@RequestMapping 的 value 属性中。此时的这个 URI 表示模块(相当于包)的名称。URI 的请求是相对于 Web 的根目录。
换个角度说,要访问处理器的指定方法,必须要在方法指定 URI 之前加上处理器类前定义的模块名称。
示例:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1MWomNYS-1658935337946)(../../../../Pictures/Spring/wps5.jpg)]](https://1000bd.com/contentImg/2022/07/31/051947048.jpeg)
提取后
@Controller
@RequestMapping("/zar")
public class HelloSpringMvc {
//相当于一个控制器处理的方法
@RequestMapping("/hello")
public String one() {
return "main";
}
@RequestMapping("/two")
public String two() {
return "main";
}
//客户端的请求:
//
//
@RequestMapping(value = "/hello", method = RequestMethod.POST)
public String one() {
return "main";
}
以上处理器方法只能处理 POST 方式提交的请求。
客户端浏览器常用的请求方式,及其提交方式有以下几种:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s1bpzH4X-1658935337947)(../../../../Pictures/Spring/wps6.jpg)]](https://1000bd.com/contentImg/2022/07/31/051947199.jpeg)
也就是说,只要指定了处理器方法匹配的请求提交方式为 POST,则相当于指定了请求发送的方式:要么使用表单请求,要么使用 AJAX 请求。其它请求方式被禁用。
当然,若不指定 method 属性,则无论是 GET 还是 POST 提交方式,均可匹配。即对于请求的提交方式无要求。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2sz14iw-1658935337948)(../../../../Pictures/Spring/wps7.jpg)]](https://1000bd.com/contentImg/2022/07/31/051947515.jpeg)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-anq1DpGv-1658935337948)(../../../../Pictures/Spring/wps8.jpg)]](https://1000bd.com/contentImg/2022/07/31/051947778.jpeg)
前四种数据注入的方式,会自动进行类型转换。但无法自动转换日期类型。
在方法中声明一个和表单提交的参数名称相同的参数,由框架按照名称直接注入。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qyoMZBKh-1658935337948)(../../../../Pictures/Spring/wps9.jpg)]](https://1000bd.com/contentImg/2022/07/31/051948033.jpeg)
在方法中声明一个自定义的实体类参数,框架调用实体类中相应的setter方法注入属性值,只要保证实体类中成员变量的名称与提交请求的name属性值一致即可。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-twqOep6p-1658935337948)(../../../../Pictures/Spring/wps10.jpg)]](https://1000bd.com/contentImg/2022/07/31/051948265.jpeg)
使用框架提供的一个注解@PathVariable,将请求url中的值作为参数进行提取,只能是超链接。restful风格下的数据提取方式。restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KuI8cIUM-1658935337949)(../../../../Pictures/Spring/wps11.jpg)]](https://1000bd.com/contentImg/2022/07/31/051948421.jpeg)
请求与形参中的名字不对应,可以使用
@RequestParam(value="name1",required=true)String namea
来进行参数名称绑定。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V3dbxazs-1658935337949)(../../../../Pictures/Spring/wps12.jpg)]](https://1000bd.com/contentImg/2022/07/31/051948600.jpeg)
在方法参数中声明一个request对象,使用request的getParameter()获取表单提交的数据,这样得到的数据还要手工进行数据类型的转换。
public String five(HttpServletRequest request){
int age=new Integer(request.getParameter("stuage"));
String name=request.getParameter("stuname");
System.out.println(age+"*********"+name);
return "main";
}
对于前面所接收的请求参数,若含有中文,则会出现中文乱码问题。Spring 对于请求参数中的中文乱码问题,给出了专门的字符集过滤器: spring-web-5.2.5.RELEASE.jar 的org.springframework.web.filter 包下的 CharacterEncodingFilter 类。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B5Otpgbl-1658935337949)(../../../../Pictures/Spring/wps13.jpg)]](https://1000bd.com/contentImg/2022/07/31/051948751.jpeg)
在 web.xml 中注册字符集过滤器,即可解决 Spring 的请求参数的中文乱码问题。不过,最好将该过滤器注册在其它过滤器之前。因为过滤器的执行是按照其注册顺序进行的。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EbnEraw0-1658935337949)(../../../../Pictures/Spring/wps14.jpg)]](https://1000bd.com/contentImg/2022/07/31/051949510.jpeg)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1sCdufXk-1658935337950)(../../../../Pictures/Spring/wps15.jpg)]](https://1000bd.com/contentImg/2022/07/31/051949665.jpeg)