1. 程式人生 > 其它 >對Filter執行順序的測試

對Filter執行順序的測試

過濾器 servlet fliter

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越上面配置越早觸發
      • 註解根據字母順序觸發