過濾鏈: webapps 由一個或多個過濾器組成. (filterChain.doFilter(......)調用下一個過濾器.)
過濾器(Filter): 是對某一資源(servlet 或靜態網頁內容)的請求或來自某一資源的響應, 或同時對這兩者進行執行過濾。鏈中的所有過濾器都是在遍歷完鏈后,在鏈末尾才真正執行過濾任務.
一.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> //設置過濾的資源
<dispatcher>REQUEST</dispatcher> //設置請求或響應
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
二.類的創建:
Filter接口: 每個 Filter 類都有對 FilterConfig 對象的訪問權,可從該對象獲得其初始化參數和 ServletContext 的引用.
doFilter(.....): 執行過濾任務。參數 FilterChain實例.doFilter(ServletRequest request, ServletResponse response) 將請求和響應傳遞到鏈中的下一個實體。
destroy(): 由 Web 容器調用,指示將從服務中取出的過濾器。在調用此方法之后,Web 容器不會再對此過濾器實例調用 doFilter 方法。
init(FilterConfig filterConfig): 由 Web 容器調用,指示將過濾器放入服務中。servlet 容器只在實例化過濾器之后調用一次 init 方法。
FilterChain實例.doFilter(ServletRequest request, ServletResponse response): 調用鏈中的下一個過濾器。
request 沿著鏈傳遞的請求。
response 沿著鏈傳遞的響應。
********************************************************
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 {
//處理過濾任務
......
chain.doFilter(request,respos);
}
public void destroy(){
}
}