Spring MVC的核心类和注解

DispatcherServlet

DispatcherServlet作用

DispatcherServlet是Spring MVC的核心类,也是Spring MVC的流程控制中心,也称为Spring MVC的前端控制器,它可以拦截客户端的请求。拦截客户端请求之后,DispatcherServlet会根据具体规则将请求交给其他组件处理。所有请求都要经过DispatcherServlet进行转发处理,这样就降低了Spring MVC组件之间的耦合性

Spring MVC执行流程

web.xml中对DispatcherServlet的配置分为两个方面。一是配置Spring MVC的前端控制器,二是配置映射的URL路径。

 

WEB-INF文件夹下默认配置文件命名规则 

 

<load-on-startup>元素取值

<load-on-startup>元素取值分为三种情况∶

  • 如果<load-on-startup>元素的值为正整数或者0,表示在项目启动时就加载并初始化这个Servlet,值越小,Servlet的优先级越高,就越先被加载;
  • 如果<load-on-startup>元素的值为负数或者没有设置,则Servlet会在被请求时加载和初始化;
  • 如果<load-on-startup>元素的值为1,表明DispatcherServlet会在项目启动时加载并初始化。

 

@Controller注解

@Controller注解作用

在Spring MVC框架中,传统的处理器类需要直接或间接地实现Controller接口,这种方式需要在Spring MVC配置文件中定义请求和Controller的映射关系。当后台需要处理的请求较多时,使用传统的处理器类会比较繁琐,且灵活性低,对此,Spring MVC框架提供了@Controller注解。使用@Controller注解,只需要将@Controller注解标注在普通Java类上,然后通过Spring的扫描机制找到标注了该注解的Java类,该Java类就成为了SpringMVC的处理器类。

Spring扫描配置文件范围 

Spring MVC的配置文件被加载时,Spring会自动扫描com.itheima.controller类包及其子包下的Java类。如果被扫描的Java类中带有@Controller、@Service等注解,则把这些类注册为Bean并存放在Spring中。与传统的处理器类实现方式相比,使用@Controller注解的方式显然更加简单和灵活。因此,在实际开发中通常使用@Controller注解来定义处理器类。

@ RequestMapping注解 

@RequestMapping注解作用

@RequestMapping注解用于建立请求URL和Handler (处理器)之间的映射=关系,该注解可以标注在方法上和类上。下面分别对@RequestMapping注解的这两种使用方式进行介绍。

方式一:标注在方法上

当@RequestMapping注解标注在方法上时,该方法就成了一个可以处理客户端请求的Handler (处理器),它会在Spring MVC接收到对应的URL请求时被执行。Handler在浏览器中对应的访问地址,由项目访问路径+处理方法的映射路径共同组成。

方式二:标注在类上

当@RequestMapping注解标注在类上时,@RequestMapping的value属性值相当于本处理器类的命名空间,即访问该处理器类下的任意处理器都需要带上这个命名空间。@RequestMapping标注在类上时,其value属性值作为请求URL的第一级访问目录。当处理器类和处理器都使用@RequestMapping注解指定了对应的映射路径,处理器在浏览器中的访问地址,由项目访问路径+处理器类的映射路径+处理器的映射路径共同组成。

@RequestMapping注解的属性 

1.value属性的两种映射路径标注 

使用value属性时,可以指定映射单个的请求URL,也可以将多个请求映射到一个方法上。在value属性中添加一个带有请求路径的列表,就可以将这个请求列表中的路径都映射到对应的方法上。 

 

 

2.method属性限定处理器映射 

method属性可以对处理器映射的URL请求方式进行限定。当请求的URL和处理器映射成功,但请求方式和method属性指定的属性值不匹配,处理器也不能正常处理请求。

method属性中有多个HTTP请求类型 

3.params属性值的定义方式 

请求映射方式 

请求映射方式的分类

基于注解风格的Spring MVC,通过@RequestMapping注解指定请求映射的URL路径。URL路径映射常用的方式有基于请求方式的URL路径映射、基于Ant风格的URL路径映射和基于REST风格的URL路径映射。

a.基于请求方式的URL路径映射

上一节中学习到可以使用@RequestMapping注解的method属性,来限定当前方法匹配哪种类型的请求方式。除了可以使用@RequestMapping土解米限疋各尸端的哨求方式之外,从Spring 4.3版本开始,还可以使用组合汪解完成客尸端请水力式HA民L。组合注解简化了常用的HTTP请求方式的映射,并且更好的表达了被注解方法的语义。

Spring MVC组合注解

  • @GetMapping :匹配GET方式的请求。
  • @PostMapping :匹配POST方式的请求。
  • @PutMapping : 匹配PUT方式的请求。
  • @DeleteMapping:匹配DELETE方式的请求。
  • @PatchMapping : 匹配PATCH方式的请求。

接下来以@GetMapping为例讲解组合注解的用法,@GetMapping是@RequestMapping(method = RequestMethod.GET)的缩写,使用组合注解替代@RequestMapping注解,可以省略method属性,从而简化代码。@GetMapping用法示例代码如下所示。

b.基于Ant风格的URL路径映射 

Spring MVC支持Ant风格的URL路径映射,所谓Ant风格其实就是一种通配符风格,可以在处理器映射路径中使用通配符对访问的URL路径进行关联。Ant风格的通配符有以下3种,分别是∶?匹配任何单字符;*匹配0或者任意数量的字符;**匹配0或者多级目录。

Ant风格通配符的路径匹配

映射路径使用多个通配符情况 

当映射路径中同时使用多个通配符时,会有通配符冲突的情况。当多个通配符冲突时,路径会遵守最长匹配原则( has more characters )去匹配通配符,如果一个请求路径同时满足两个或多个Ant风格的映射路径匹配规则,那么请求路径最终会匹配满足规则字符最多的路径。例如,/ant/a/path同时满足/**/path和/ant/*/path匹配规则,但/ant/path最终会匹配“/ant/*/path”路径。

c.基于RESTful风格的URL路径映射 

RESTful是按照REST风格访问网络资源,简单说RESTful就是把请求参数变成请求路径的一种风格。而REST ( Representational State Transfer )是一种网络资源的访问风格,规范对了网络资源的访问方式。REST所访问的网络资源可以是一段文本、一首歌曲、一种服务,总之是一个具体的存在。每个网络资源都有一个URI指向它,要获取这个资源,访问它的URI就可以,因此URI即为每一个资源的独一无二的标识符。

传统风格与RESTful风格访问URL格式的不同

RESTful风格的基本请求操作

RESTful风格在HTTP请求中,通过GET、POST、PUT和DELETE 4个动词对应四种基本请求操作,具体如下所示。

  • GET用于获取资源。
  • POST用于新建资源。
  • PUT用于更新资源。
  • DELETE用于删除资源

RESTful风格四种请求的约定方式 

使用RESTful风格的优势 

约定不是规范,约定是可以打破,所以称为RESTful风格,而不是RESTful规范。使用RESTful风格的优势在于路径的书写比较简便,并且通过地址无法得知做的是何种操作,可以隐藏资源的访问行为。

项目结构:

 项目地址:gitee地址

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿瞒有我良计15

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值