Servlet—實現過濾器

一,實現過濾器
java

    在Servlet中,若是要定義一個過濾器,則直接讓一個類實現javax.servlet.Filter接口便可完成。此接口定義了三個方法。
web

NOapp

方法 描述
1 public void init(FilterConfig filterConfig) throws ServletException 過濾器初始化時調用,能夠經過filterConfig取得配置的初始化參數
2 public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain) throws ServletException,IOException 完成具體的過濾操做,而後經過FilterChain讓請求繼續向下傳遞
3 public void destroy() 過濾器銷燬時使用

    在三個方法中,最重要的是doFilter()方法,此方法定義了ServletRequest,ServletResponse和FilterChain三種參數,其中前兩個參數表示,過濾器能夠完成對任意協議的過濾操做。FilterChain接口的做用是將用戶的請求向下傳遞給其餘過濾器或Servlet執行操做。
this

    FilterChain接口定義的方法
編碼

NO 方法 描述
1 public void doFilter(ServletRequest req,ServletResponse resp) throws IOException,ServletException` 將用戶請求向下傳遞給其餘過濾器或Servlet

    在FilterChain接口中,定義了一個一樣的doFileter()方法,由於在這一過濾器以後有可能還有其餘過濾器,也多是請求的最終目標Servlet。這樣就經過FilterChain造成了一個「過濾鏈"。
url

public class FilterDemo implements Filter {
	
	public void init(FilterConfig config) throws ServletException {
		String initParam = config.getInitParameter("ref") ;
		System.out.println("過濾器初始化,初始化參數:"+initParam) ;
	}
	public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain) throws ServletException,IOException{
		System.out.println("執行doFilter()方法以前") ;
		chain.doFilter(req,resp) ;
		System.out.println("執行doFilter()方法以後") ;
	}
	public void destroy() {
		System.out.println("過濾器銷燬") ;
	}
}

    web-xml文件配置
spa

<filter>
		<filter-name>FilterDemo</filter-name>
		<filter-class>org.panda.filterdemo.FilterDemo</filter-class>
		<init-param>
			<param-name>ref</param-name>
			<param-value>Hello World</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>FilterDemo</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

    過濾器的初始化方法是在容器啓動時就加載的,而且經過FilterConfig的getInitParamter()方法取得了初始化參數。
code

二,過濾器的應用
xml

    1,編碼過濾
接口

    爲全部的頁面設置統一的請求編碼

public class EncodingFilter implements Filter {
	private String charSet ;							//設置字符編碼
	public void destroy() {
		System.out.println("過濾器銷燬") ;
	}
	public void init(FilterConfig config) throws ServletException {
		this.charSet = config.getInitParameter("charset") ;		//取得初始化參數
	}
	public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain) throws ServletException,IOException{
		resp.setCharacterEncoding("this.charSet") ;		//設置統一編碼
	}
}
相關文章
相關標籤/搜索