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越上面配置越早触发
        • 注解根据字母顺序触发
  • 相关阅读:
    prase arraylist where in to ParamsQuery on sql server 2008 using TVB: tvpdemo.cs(where in 转sql 参数化查询)
    手动依赖性注入 NInject(1) (转载)
    单件(单态,Singleton)模式部分
    详解Javascript中的Url编码/解码
    学习Web应用漏洞最好的教程WebGoat(转载)
    百度网盘 邀请码
    colorbox去除close关闭按钮,附上colorbox的基本使用方法
    P3974 [TJOI2015]组合数学
    P1772 [ZJOI2006]物流运输
    P1434 [SHOI2002]滑雪
  • 原文地址:https://www.cnblogs.com/rainful/p/15080590.html
Copyright © 2011-2022 走看看