過濾鏈: webapps 由一個或多個過濾器組成. (filterChain.doFilter(......)調(diào)用下一個過濾器.)
過濾器(Filter): 是對某一資源(servlet 或靜態(tài)網(wǎng)頁內(nèi)容)的請求或來自某一資源的響應(yīng), 或同時對這兩者進(jìn)行執(zhí)行過濾。鏈中的所有過濾器都是在遍歷完鏈后,在鏈末尾才真正執(zhí)行過濾任務(wù).
一.WEB.XML配置(可有多個<filter>):
<filter>
<filter-name>FilterName</filter-name>
<filter-class>package.class.FilterClass</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterName</filter-name>
<url-pattern>/*</url-pattern> //設(shè)置過濾的資源
<dispatcher>REQUEST</dispatcher> //設(shè)置請求或響應(yīng)
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
二.類的創(chuàng)建:
Filter接口: 每個 Filter 類都有對 FilterConfig 對象的訪問權(quán),可從該對象獲得其初始化參數(shù)和 ServletContext 的引用.
doFilter(.....): 執(zhí)行過濾任務(wù)。參數(shù) FilterChain實(shí)例.doFilter(ServletRequest request, ServletResponse response) 將請求和響應(yīng)傳遞到鏈中的下一個實(shí)體。
destroy(): 由 Web 容器調(diào)用,指示將從服務(wù)中取出的過濾器。在調(diào)用此方法之后,Web 容器不會再對此過濾器實(shí)例調(diào)用 doFilter 方法。
init(FilterConfig filterConfig): 由 Web 容器調(diào)用,指示將過濾器放入服務(wù)中。servlet 容器只在實(shí)例化過濾器之后調(diào)用一次 init 方法。
FilterChain實(shí)例.doFilter(ServletRequest request, ServletResponse response): 調(diào)用鏈中的下一個過濾器。
request 沿著鏈傳遞的請求。
response 沿著鏈傳遞的響應(yīng)。
********************************************************
package package.class;
import javax.servlet.Filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class FilterName implements Filter{
filterConfig fc=null;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig=filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException {
//處理過濾任務(wù)
......
chain.doFilter(request,respos);
}
public void destroy(){
}
}