• 对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越上面配置越早触发
        • 注解根据字母顺序触发
  • 相关阅读:
    python+hadoop=?
    Fluentd: The Missing Log Collector
    hadoop streaming 记录
    valgrind备忘
    [hadoop源码阅读][9]mapreduce概论
    GNU Binutils工具
    vim encoding
    [hadoop源码阅读][8]datanodedatanode
    Webdis: HTTP + JSON API for Redis
    gdb 小备注
  • 原文地址:https://www.cnblogs.com/rainful/p/15080590.html
Copyright © 2020-2023  润新知