對Filter執行順序的測試
阿新 • • 發佈:2021-07-30
過濾器 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越上面配置越早觸發
- 註解根據字母順序觸發
- 結論