【JSP開発】フィルタFilterの原理(回転)


フィルタは、ソースデータと宛先データとの間でフィルタリングの役割を果たすミドルウェアです.
       Webアプリケーションでは、リクエストを処理する際に、文字セットを設定するなど、共通の作業がしばしば行われます.このような仕事は各ページに書く必要があり、このような書き方は骨が折れて修正しにくい.フィルタを使用すると、これらのプロセスの前にブロックが追加され、必要な操作がブロックに入れられて実行され、このブロックを通過したすべてのプロセスが「実行」されます.   
 
      Javax.servlet.Filterインタフェースを実装するには、フィルタを開発する必要があります.
      このインタフェースには、3つのフィルタを実行する必要があります.
·         doFilter(ServletRequest,ServletResponse, FilterChain):これは濾過挙動を完了する方法である.これも上流フィルタ呼び出しの方法です.導入されたFilterChainオブジェクトは、後続のフィルタによって呼び出される情報を提供する.フィルタがフィルタチェーンの最後のフィルタである場合、要求は要求されたリソースに渡されます.クライアントに直接応答情報を返すこともできます.
·         init(FilterConfig):Webコンテナによってフィルタの初期化作業の完了を呼び出す.これにより、第1のdoFilter()呼び出しの前にコンテナによって呼び出されることが保証される.Web.xmlファイルで指定した初期化パラメータを取得できます.
·         destroy():Webコンテナによってリソースを解放するために呼び出され、doFilter()のすべてのアクティビティがインスタンスによって終了した後、メソッドが呼び出される.
   
   コードデモ
 
[java] view plaincopy
1.     public  class  TestFilter  implements Filter {   
2.       
3.          public  void  init(FilterConfig arg0) throws ServletException {      
4.       
5.          }   
6.       
7.          public void destroy() {     
8.       
9.          }   
10.   
11.       public void doFilter(ServletRequest request, ServletResponse response,   
12.   
13.           FilterChain chain) throws IOException, ServletException {      
14.   
15.       }   
16.   
17.  }    
18.    
 
 フィルタ開発が完了したら、web.xmlで構成する必要があります.
 
コードプレゼンテーション:Web.xmlにFilter構成を追加する
[html] view plaincopy
1.          
2.       
3.            TestFilter   
4.       
5.            com.wh.filter. TestFilter   
6.                 
7.                 characterEncoding   
8.                 UTF-8   
9.            
   
10. 
    
11.    
12.   
13.     
14.    
15.          TestFilter   
16.        /*  
17. 
  
18.   
 解析:   
        ノードは、Filterに対応するクラスがどれであるかを記述します.具体的なパスを明記します.
        は、ノードのと同じ値でなければなりません.
             はFilterのパラメータです.このパラメータを取得する方法は次のとおりです.  
                public void init(FilterConfig filterConfig) throws ServletException {
                             characterEncoding = filterConfig.getInitParameter("characterEncoding"); 
                 }
 
         フィルタを変更する関連URLスタイルを指定します.
                   url-patternには主に4つのマッチング方式があります
                     (a)正確なマッチングとは、japやサーブレットなどのフィルタリングが必要な要求の具体的なアドレスを記入することである.例えば、/Filter/TestFilter
                     (b)拡張マッチング、「*」番号と拡張子からなる(*.jspなど
                     (c)ディレクトリと/*を含むパス接頭辞マッチング  たとえば、/Servlet/*とは、サーブレットディレクトリの下にあるすべてのリソースをフィルタすることです.
                      (d)すべて一致し、/*を使用し、正しいのでリソースをフィルタリングする  
 
 Filterプロセスの概要:
      要求が開始されると、Webコンテナは、フィルタがこの要求のリソースに関連しているかどうかを判断し、関連がある場合はフィルタに要求を渡して処理し、フィルタで要求の内容を変更してから要求を要求されたリソースに渡すことができる.要求されたリソースに応答すると、Webコンテナは同様に応答をフィルタに転送し、フィルタでは、応答を処理してクライアントに応答を送信できます.このプロセス全体で、クライアントとターゲットリソースはフィルタの存在を知りません.
      フィルタはリクエストを2回(requestとresponseに対して)フィルタリングしたが、実はFilterはリクエスト中のRequestとResponseをブロックした.ブロックは処理を行い、処理が終わった後に元の呼び出しフローに戻る.これは責任チェーンモードを体現している.
 
      1つのWebアプリケーションで複数のフィルタを構成し、フィルタチェーンを形成することができます.
      リソースを要求すると、フィルタチェーン内のフィルタが順次要求を処理し、応答を受信すると写真の逆の順序で応答を処理する.
             
       複数のフィルタの実行順序は,web.xmlにおけるfilterの構成の上下順に決定される.
 
 Filterを使用するメリット:
       Filterが実行する全過程においてクライアントとターゲットリソースはフィルタの存在を知らない.Filterは、元のプログラムに何の修正もしなくても、Filterを書くだけで、元のプログラムはFilterを使いたい、XMLファイルで宣言するだけでよいという宣言式のサービスを提供している.彼は挿抜可能な能力を持っていて、使うときはweb.XMLを付けて、使わないときはWeb.xmlを変更するだけで、システム全体に影響はありません.この宣言的なサービスは便利で、強力です.
       次に、ユーザーがログインしているかどうかを検証したり、操作権限があるかどうかを判断したり、Session、文字セットを判断したりするなど、Filterを使って制御業務を行うのも便利です.
      
 WEB開発でよく見られるアプリフィルターの場所:
    1、     ユーザー要求の統一認証、権限管理
    2、     ユーザーのアクセス要求の記録とレビュー
    3、     ユーザーが送信したデータのフィルタリングと置換
    4、     画像フォーマットの変換
    5、     応答するコンテンツを圧縮し、転送量を減らす
    6、     要求と対応する暗号化処理
 
 最後に、FilterテクノロジーはPostリクエストにのみ機能することに注意してください.