サーブレット:実装フィルタ

2758 ワード

一、実現フィルタ
サーブレットでは、フィルタを定義する場合は、クラスにjavaxを直接実装.servlet.Filterインタフェースで完了します.このインタフェースには、3つのメソッドが定義されています.
NO
方法
説明
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()
フィルタ破棄時に使用
3つの方法の中で、最も重要なのはdoFilter()方法であり、この方法はサーブレットRequest、サーブレットResponse、およびFilterChainの3つのパラメータを定義し、前の2つのパラメータは、フィルタが任意のプロトコルに対するフィルタ処理を完了できることを示している.FilterChainインタフェースの役割は、ユーザの要求を他のフィルタまたはサーブレットに渡して操作することである.
FilterChainインタフェース定義の方法
NO
方法
説明
1
public void doFilter(ServletRequest req,ServletResponse resp) throws IOException,ServletException`
ユーザー要求を他のフィルタまたはサーブレットに渡す
FilterChainインタフェースでは、同じdoFilter()メソッドが定義されています.このフィルタの後に他のフィルタがある可能性があり、要求された最終ターゲットサーブレットである可能性があります.これによりFilterChainにより「フィルタチェーン」が形成される.
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ファイル構成
<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()法により初期化パラメータを取得した.
二、フィルタの応用
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") ;		//      
	}
}