Spring MVC应用 -- 过滤器

一:过滤器与拦截器

经常会有文章拿两者进行比较,说的云里雾里让人看不到春天在哪里。个人理解两者直白来讲就两点差距

  1. 使用上拦截器更加灵活,可以添加不拦截路径,过滤器只能配置实现拦截目标
  2. 实现上拦截器基于MVC容器属于MVC组件,过滤器基于Servlet容器属于WEB容器

二:过滤器实现

2.1 代码实现

首先继承过滤器抽象类OncePreRequestFilter,重写doFilter()即可。最后调用的doFilterInternal()方法可以理解为流程的继续。如果后续有过滤器则继续过滤,如果无过滤器则实现过滤方法逻辑
Spring MVC应用 -- 过滤器_第1张图片

2.2 web.xml配置

web.xml文件上只需要配置相对应过滤器实现以及过滤路径即可,这一点与拦截器配置类似
Spring MVC应用 -- 过滤器_第2张图片

三:执行顺序

3.1 多过滤器

当配置多个过滤器的时候可以看到最后的执行顺序就是按照web.xml文件中声明的顺序执行,这与拦截器类似
Spring MVC应用 -- 过滤器_第3张图片

配置位置第一过滤器
配置位置第二过滤器
执行完毕控制层逻辑
3.2 过滤器与过滤方法

过滤器调用方法doFilter()之后会执行后面剩余的逻辑,但是注意这里不能再操作request与response,操作无效。所以这个可以认为是骚操作,要这么玩还不如使用拦截器实现
Spring MVC应用 -- 过滤器_第4张图片

你可能感兴趣的:(Spring框架,filter)