如何使用Filter(过滤器二)

目录

一、过滤器链

二、执行顺序

三、示例说明


一、过滤器链

本片文章接如何使用Filter(过滤器一)-CSDN博客https://blog.csdn.net/u011529483/article/details/142059978?spm=1001.2014.3001.5502

继续说说过滤器的执行顺序。

过滤器和拦截器一样都是可以配置多个的,以链式的形式一个一个的执行,所以就会有它的执行顺序。

页面请求----过滤器1、过滤器2......----拦截器1、拦截器2......----控制器(Controller)

二、执行顺序

过滤器的执行顺序和配置顺序有关,如下代码的执行顺序是BwFilter先执行,然后AwFilter。因为BwFilter配置在前面。

复制代码
<filter-mapping>
  <filter-name>BwFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
  <filter-name>AwFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

三、示例说明

1. 接上篇 如何使用Filter(过滤器一)-CSDN博客https://blog.csdn.net/u011529483/article/details/142059978?spm=1001.2014.3001.5502文章中的项目基础上增加一个过滤器BwFilter.java类:

java 复制代码
package com.wqbr.showebsite.wfilter;

import javax.servlet.*;
import java.io.IOException;

/**
 * @author lv
 * @date 2024年9月9日
 *
 */
public class BwFilter implements Filter {

    @Override
    public void init(FilterConfig config) throws ServletException {
        System.out.println("BwFilter .... init执行。。。。。。");
    }

    @Override
    public void destroy() {
        System.out.println("BwFilter .... destroy销毁。。。。。。");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        System.out.println("BwFilter .... doFilter执行。。。。。。");
        chain.doFilter(request, response);
    }
}

2. 在web.xml中配置过滤器BwFilter:

XML 复制代码
  <!--配置自定义过滤器-->
  <filter>
    <filter-name>AwFilter</filter-name>
    <filter-class>com.wqbr.showebsite.wfilter.AwFilter</filter-class>
  </filter>
  <filter>
    <filter-name>BwFilter</filter-name>
    <filter-class>com.wqbr.showebsite.wfilter.BwFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>BwFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>AwFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

3. 启动项目

控制台运行结果如下:BwFilter的doFilter方法先执行,再执行AwFilter的doFilter方法。而<filter-mapping>配置时同样先配置的BwFilter,所以这个BwFilter先执行了doFilter方法。


补充: 由于本示例项目是springmvc项目,且自定义了一个HandlerInterceptorAdapter拦截器。

所以也测试下过滤器Filter和Spring MVC拦截器的执行顺序。我们通过页面请求Controller后,控制台打印如下:

可以看出执行顺序是:Filter先执行、再执行拦截器的preHandle方法、然后执行的Controller方法。关于Spring MVC拦截器的使用可以查看如何使用HandlerInterceptorAdapter拦截器-CSDN博客https://blog.csdn.net/u011529483/article/details/141925173?spm=1001.2014.3001.5502

完!

相关推荐
陈随易21 分钟前
在 VSCode 里,把项目一键部署到服务器
前端·后端·程序员
鱼樱前端1 小时前
我用 Claude Code 后,编码效率翻 3 倍。但更值钱的是别的。
前端·后端·ai编程
犀利豆1 小时前
Claude code tools 研究系列-开篇(AskUserQuestion)
后端
头发还在的女程序员2 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
CodeStats2 小时前
【Spring事务】Spring事务注解 @Transactional 完整体系:从 MySQL 隔离级别到 MyBatis 原理详解
java·spring·mybatis·事务·transactional
我命由我123453 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
颜酱4 小时前
06 | 把 meta_config 同步进 MySQL(生成阶段)
前端·人工智能·后端
都叫我大帅哥5 小时前
从Python到Java:为什么企业级Agent最终会选择Java?
java·ai编程
wanderist.5 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
IT_陈寒5 小时前
SpringBoot自动配置坑了我一周,原来问题这么蠢!
前端·人工智能·后端