1. 程式人生 > >Web.xml過濾器配置及執行順序概念

Web.xml過濾器配置及執行順序概念

TP filter ctp abstract void xml配置 AC res com

第一個過濾器

@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過濾器配置及執行順序概念