JavaWeb学習編の----ServletフィルタFilter
6780 ワード
:http://blog.csdn.net/jiangwei0910410003/article/details/23372847?locationNum=8
、Servlet :
すべてのサーブレットフィルタクラスはjavaxを実装する必要があります.servlet.Filterインタフェース.このインタフェースには、3つのフィルタクラスが実装されなければならない方法が含まれています.
A.init(FilterConfig):
これはサーブレットフィルタの初期化方法であり、サーブレットコンテナがサーブレットフィルタインスタンスを作成すると呼び出されます.この方法ではwebを読み取ることができる.xmlファイルのサーブレットフィルタの初期化パラメータ
B.doFilter(ServletRequest,ServletResponse,FilterChain):
この方法は実際のフィルタ処理を完了し、顧客がフィルタに関連付けられたURLへのアクセスを要求すると、サーブレットコンテナはフィルタのdoFilterメソッドを先に呼び出す.FilterChainパラメータは、後続のフィルタにアクセスするために使用されます.
C.destroy():
サーブレットコンテナは、フィルタインスタンスを破棄する前にこのメソッドを呼び出します.このメソッドでは、サーブレットフィルタが使用するリソースを解放できます.
##############################################################
二、サーブレットフィルタの作成手順:
1.javaxを実現する.servlet.Filterインタフェース2.initメソッドを実装し、フィルタの初期化関数を読み出す3.doFilterメソッドを実装し、リクエストまたはフィルタへの応答を完了する4.FilterChainインタフェースオブジェクトのdoFilterメソッドを呼び出し、後続のフィルタにリクエストまたは応答を渡す
5.フィルタの破棄
####################################################################
三、サーブレットフィルタの要求に対するフィルタリング:1.サーブレット容器はフィルタインスタンスを作成する2.フィルタインスタンスはinitメソッドを呼び出し、フィルタの初期化パラメータを読み取る3.フィルタインスタンスはdoFilterメソッドを呼び出し、初期化パラメータの値に基づいて要求が正当かどうかを判断する4.もしこの要求が規則に合わないならば要求をブロックする5.要求が正当であればchainを呼び出す.doFilterメソッドは、この要求を後続に伝達する############################################################################################################パッケージ化されたサーブレットResponseにユーザがカスタマイズした出力ストリームを提供する3.要求を後続に伝達する4.Webコンポーネントに応答を生成する5.パッケージ化されたサーブレットResponseからユーザがカスタマイズした出力ストリームを取得する6.応答内容をユーザがカスタマイズした出力ストリームを介してバッファストリームに書き込む7.バッファストリームに応答の内容を修正した後にバッファストリームをクリアする出力応答内容#######################################################################################################xmlファイルに要素と要素を追加します.B.エレメントは、フィルタを定義するために使用されます.属性の意味filter-nameフィルタの名前filter-classフィルタのクラス名init-paramは、フィルタインスタンスに初期化パラメータを提供します.複数のC要素を使用してフィルタとURLを関連付けることができます.属性の意味filter-nameフィルタの名前url-patternフィルタに関連付けるURLを指定します.
まずwebを見てみましょう.xmlの構成:
logfilter
com.weijia.filterservlet.LogFilter
logfilter
/*
setCharacterEncoding
com.weijia.filterservlet.EncodingFilter
encoding
utf-8
setCharacterEncoding
/*
エンコードフィルタを見てみましょう
package com.weijia.filterservlet;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
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 EncodingFilter implements Filter {
private String encoding;
private HashMap params = new HashMap();
//
public void destroy() {
System.out.println("end do the encoding filter!");
params=null;
encoding=null;
}
public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {
System.out.println("before encoding " + encoding + " filter!");
req.setCharacterEncoding(encoding);
chain.doFilter(req, resp);
System.out.println("after encoding " + encoding + " filter!");
System.err.println("----------------------------------------");
}
//
public void init(FilterConfig config) throws ServletException {
System.out.println("begin do the encoding filter!");
encoding = config.getInitParameter("encoding");
for (Enumeration> e = config.getInitParameterNames(); e.hasMoreElements();) {
String name = (String) e.nextElement();
String value = config.getInitParameter(name);
params.put(name, value);
}
}
}
ログフィルタ:
package com.weijia.filterservlet;
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;
import javax.servlet.http.HttpServletRequest;
public class LogFilter implements Filter {
public FilterConfig config;
public void destroy() {
this.config = null;
System.out.println("end do the logging filter!");
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
System.out.println("before the log filter!");
// HttpServletRequest
HttpServletRequest hreq = (HttpServletRequest) req;
//
System.out.println("Log Filter :"+hreq.getServletPath() );
try {
// Filter , 。
chain.doFilter(req, res);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("after the log filter!");
}
public void init(FilterConfig config) throws ServletException {
System.out.println("begin do the log filter!");
this.config = config;
}
}
FilterServiceletへのアクセス
実行結果:
before the log filter! Log Filterはユーザーの要求のアドレスをキャプチャしました:/FilterServices before encoding utf-8 filter!after encoding utf-8 filter! ---------------------------------------- after the log filter!
このフィルタの呼び出し関係は、実行結果からわかります.
以上は私が転送して遮断器に対してとても透徹している1つの内容に興味のある友达が原貼に行くことができると感じています.