SSM(spring mvc+spring+mybatis)学习路径——2-2、spring MVC拦截器

时间:2023-03-08 16:47:11
SSM(spring mvc+spring+mybatis)学习路径——2-2、spring MVC拦截器

SSM学习路径分为4个阶段

  • 战斗伊始——Spring
  • 转战阵地——SpringMVC
  • 再下一城——MyBatis
  • 终极目标——整合案例

转战阵地——SpringMVC

2-2 Spring MVC拦截器

第一章 概述

1. 课程内容

  • 了解拦截器
  • 掌握Spring mvc拦截器的原理和使用
  • 掌握Spring mvc拦截器的使用场景
  • Spring mvc拦截器的对比和总结

2. 什么是拦截器?

  • 拦截器是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强
sequenceDiagram
浏览器->>服务器: 请求数据
服务器->>浏览器: 返回数据
  • 使用场景:解决请求的共性问题(如:乱码问题、权限验证问题等)

第二章 Spring mvc拦截器的实现

2-1 拦截器的工作原理

  • Spring mvc可以通过配置过滤器来解决乱码问题
  • 拦截器的工作原理和过滤器非常相似

2-2 拦截器的实现

  1. 编写拦截器类实现HandlerInterceptor接口
  2. 将拦截器注册到Spring mvc框架中
<mvc:interceptors>
    <bean class="com.springmvc.test.interceptor.Test1Interceptor"/>
</mvc:interceptors>
  1. 配置拦截器的拦截规则
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/viewAll.form"/>
        <bean class="com.springmvc.test.interceptor.Test1Interceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

2-3 拦截器的方法介绍

  1. preHandle方法,在请求被处理之前进行调用
    返回值:表示我们是否需要将当前的请求拦截下来
    如果返回false,请求将被终止
    如果返回true,请求会被继续执行

  2. postHandle方法,在请求被处理之后进行调用
  3. afterCompletion方法,在请求结束之后才进行调用

2-4 多个拦截器应用

SSM(spring mvc+spring+mybatis)学习路径——2-2、spring MVC拦截器

多个拦截器可以想象成从A到B经过2个收费站。假设A开车到B,先后经过收费站1和收费站2,此时依次执行收费站1的preHandle方法和收费站2的preHandle方法。从B回到A,依次经过收费站2和收费站1,依次执行收费站2的postHandle方法和收费站1的postHandle方法,然后收费站寄来发票,因为回来是先经过的收费站2,所以理论上是收费站2的发票先出来,所以依次执行收费站2的afterCompletion和收费站1的afterCompletion

2-5 拦截器的其他实现方式

拦截器的类还可以通过实现WebRequestInterceptor接口来编写,向Spring mvc框架注册的写法不变
弊端:preHandle方法没有返回值,不能终止请求

第三章 拦截器的使用场景

使用原则:处理所有请求的共同问题

  1. 解决乱码问题
  2. 解决权限验证问题

第四章 拦截器和过滤器的对比

  • 过滤器Filter依赖于Servlet容器,基于回调函数,过滤范围大
  • 拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求

总结:

  • 拦截器可以处理web应用中请求的一些通用性问题
  • 共性问题在拦截器中处理,可以减少重复代码,便于维护