zoukankan      html  css  js  c++  java
  • 对Filter执行顺序的测试

    Filter执行顺序

    本文主要对 Filter 在前端提交后过滤器的顺序进行测试

    涉及的主要测试为 xml 配置测试及 注解 配置测试

    注解 及 xml配置共存情况

    • xml文件配置
    <filter>
        <filter-name>filter4</filter-name>
        <filter-class>filtertest.Demo4</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter4</filter-name>
        <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>filter3</filter-name>
        <filter-class>filtertest.Demo3</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter3</filter-name>
        <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>
    
    • 各个过滤器配置
    @WebFilter("/servlet/*")
    public class Demo1 implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            System.out.println("fliter1");
            chain.doFilter(request, response);
            System.out.println("fliter1back");
        }
    }
    
    @WebFilter("/servlet/*")
    public class Demo2 implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            System.out.println("fliter2");
            chain.doFilter(request, response);
            System.out.println("fliter2back");
        }
    }
    
    public class Demo3 implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            System.out.println("fliter3");
            chain.doFilter(request, response);
        }
    }
    
    public class Demo4 implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            System.out.println("fliter4");
            chain.doFilter(request, response);
        }
    }
    
    • 测试结果稳定

      fliter4
      fliter3
      fliter1
      fliter2
      fliter2back
      fliter1back

    • 猜测结论

      • xml一定优先注解

      • back方法执行顺序和触发顺序正好相反

      • xml越上面配置越早触发

      • 注解可能是因为名字字母的原因

        • 测试将 Demo2 类前面加一个 a 这样就是 ADemo2

        • xml配置更换 Demo3 和 Demo4 的位置

          • 猜测结果

            fliter3
            fliter4
            fliter2
            fliter1
            fliter1back
            fliter2back

    • 经测试结论正确

      • 结论
        • xml一定优先注解
        • back方法执行顺序和触发顺序正好相反
        • xml越上面配置越早触发
        • 注解根据字母顺序触发
  • 相关阅读:
    vr这么火我来看看there.js
    简明现代魔法博客图书馆之php学习记录
    ecshop学习记录
    mysql学习笔记
    linux服务器自动备份mysql数据库
    thinkphp分页及分页样式
    php手册学习(2)
    非常不错的ajax原理总结
    最全的HTTP头部信息分析
    利用curl并发来提高页面访问速度
  • 原文地址:https://www.cnblogs.com/rainful/p/15080590.html
Copyright © 2011-2022 走看看