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越上面配置越早触发
        • 注解根据字母顺序触发
  • 相关阅读:
    async/await 的基础使用及原理简介
    ES6---new Promise()使用方法
    JS中三个点(...)是什么鬼?
    export与export default的区别
    原生页面和H5页面的优劣势分析
    原生页面与H5页面区别
    3月9日学习日志
    3月8日学习日志
    3月5日学习日志
    3月4日学习日志
  • 原文地址:https://www.cnblogs.com/rainful/p/15080590.html
Copyright © 2011-2022 走看看