Spring MVC 进阶

61 阅读1分钟

在 Spring MVC 中使用 Filter

Filter 是 Servlet 规范中定义的接口,可以在 Spring MVC 框架中使用

  • 第一步:引入 servlet 依赖

image.png

  • 第二步:定义 Filter

image.png

  • 第三步:请求接口

image.png

Spring MVC 拦截器 - Interceptor

Spring MVC 提供了拦截器 Interceptor,对请求进行拦截处理,作用类似 Servlet 的 Filter

  • 第一步:定义拦截器

image.png

  • 第二步:配置拦截器

image.png

image.png

  • 第三步:请求接口

image.png

如果 preHandle 返回 false,那么请求不会被放行,Controller 层方法不会被执行

Filter 和 Interceptor 的执行顺序

image.png

image.png

  • Filter before
  • Interceptor preHandle
  • 目标方法
  • Interceptor postHandle
  • Interceptor afterCompletion
  • Filter after

Filter 如果使用 @WebFilter 注解方式无法指定执行顺序

Interceptor 使用 order 指定执行顺序

Filter 和 Interceptor 的区别

  • Filter 是 Servlet 规范定义的接口,Interceptor 是 Spring MVC 定义的接口
  • Filter 不被 Spring IoC 容器管理,被 Web 容器管理
  • Interceptor 是被 Spring IoC 容器管理 的 bean,可以注入并使用 Spring IoC 容器中的其他 bean

image.png

Spring MVC 中请求的生命周期

image.png

SpringMVC主流程主要有三个阶段:

  • 处理器映射阶段(HandlerMapping):通过解析url中的路径来找到对应的处理链(包含处理器和拦截器)
  • 处理器适配阶段(HandlerAdapter):通过解析请求中的参数来适配处理器,并执行处理器
  • 视图解析阶段(ViewResolver):如果处理器返回的是逻辑视图,那么会在这个阶段绘制成可展示的视图

DispatcherServlet 统筹整个流程。