Web.xml過濾器配置及執行順序概念
第一個過濾器
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
Boolean b1 = false;
if (b1 = true) {
// 繼續此次請求,如果有多個過濾器,進入下一個過濾器
chain.doFilter(request, response);
} else {
// 重定向此請求
((HttpServletResponse) response).sendRedirect("/xxxx");
}
System.out.println("UrlFilter_1 doFilter...");
}
-----------------------------------------------------------------------------------
第二個過濾器
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
Boolean b2 = false;
if (b2 = true) {
// 繼續此次請求,如果有多個過濾器,進入下一個過濾器
chain.doFilter(request, response);
} else {
// 重定向此請求
((HttpServletResponse) response).sendRedirect("/xxxx");
}
System.out.println("UrlFilter_1 doFilter...");
}
-----------------------------------------------------------------------------------
第三個過濾器
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
Boolean b3 = false;
if (b3 = true) {
// 繼續此次請求,如果有多個過濾器,進入下一個過濾器
chain.doFilter(request, response);
} else {
// 重定向此請求
((HttpServletResponse) response).sendRedirect("/xxxx");
}
System.out.println("UrlFilter_1 doFilter...");
}
--------------------------------------------------------------------------------------------
Web,xml配置如下
<filter>
<filter-name>url_1</filter-name>
<filter-class>com.boya.filters.UrlFilter_1</filter-class>
</filter>
<filter>
<filter-name>url_3</filter-name>
<filter-class>com.boya.filters.UrlFilter_3</filter-class>
</filter>
<filter>
<filter-name>url_2</filter-name>
<filter-class>com.boya.filters.UrlFilter_2</filter-class>
</filter>
<filter-mapping>
<filter-name>url_3</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>url_1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>url_2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
--------------------------------------------------------------------------------------
執行結果為
UrlFilter_1 初始化...
UrlFilter_3 初始化...
UrlFilter_2 初始化...
2013-9-29 13:38:40 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
2013-9-29 13:38:40 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8009"]
2013-9-29 13:38:40 org.apache.catalina.startup.Catalina start
信息: Server startup in 596 ms
UrlFilter_2 doFilter...
UrlFilter_1 doFilter...
UrlFilter_3 doFilter...
-------------------------------------------------------------------------------------
分析結果:
1.
chain.doFilter(request, response);
為繼續此次請求,如果有下一個過濾器就進去下一個過濾器,沒有就直接跳轉到請求的鏈接裏。
2.
過濾器的執行順序與xml裏面的
<filter-mapping>
<filter-name>xxx</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
有關系,順序為xml 配置的順序由下至上 執行。
Web.xml過濾器配置及執行順序概念