フィルタ、リスナー、ブロッキングの違い


1.フィルタ
サーブレットのフィルタFilterはjavaxを実現する.servlet.Filterインタフェースのサーバ側プログラムは,主な用途は文字符号化のフィルタリング,業務論理判断のいくつかを行うことである.その原理は、あなたがwebにいる限りです.xmlファイルはブロックするクライアント要求を構成し、要求をブロックするのに役立ちます.このとき、要求または応答(Request、Response)に対して統一的に符号化を設定し、操作を簡素化することができます.また、ユーザがログインしたかどうか、ページにアクセスする権限があるかどうかなどの論理的判断も可能である.これはあなたのウェブアプリケーションの起動に伴って起動され、一度だけ初期化され、後で関連要求をブロックすることができます.あなたのウェブアプリケーションが停止または再配置されたときにのみ破棄されます.以下は、符号化されたコードの例をフィルタリングして使用を理解します.
 MyCharsetFilter.java       
package ...; 
import ...; 
//     :      ;  ,          . 
// Filter web       
//  web          ,Filter     
public class MyCharsetFilter implements Filter { 
     private FilterConfig config = null; 
     public void destroy() { 
         System.out.println("MyCharsetFilter    ..."); 
     } 
  
     public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throws IOException, ServletException { 
         //        
         HttpServletRequest request = (HttpServletRequest)arg0; 
         HttpServletResponse response = (HttpServletResponse)arg1; 
         //   web.xm      ,   Request、Response          request.setCharacterEncoding(config.getInitParameter("charset"));          response.setContentType(config.getInitParameter("contentType"));          response.setCharacterEncoding(config.getInitParameter("charset"));          
        //           
         chain.doFilter(request, response); 
     } 
  
     public void init(FilterConfig arg0) throws ServletException { 
         this.config = arg0; 
         System.out.println("MyCharsetFilter   ..."); 
     } 
 } 

以下はMyCharsetFilterです.JAvaはwebにあります.xmlでの構成:
 <filter> 
       <filter-name>filter</filter-name> 
       <filter-class>dc.gz.filters.MyCharsetFilter</filter-class> 
       <init-param> 
           <param-name>charset</param-name> 
           <param-value>UTF-8</param-value> 
       </init-param> 
       <init-param> 
           <param-name>contentType</param-name> 
           <param-value>text/html;charset=UTF-8</param-value> 
       </init-param> 
   </filter> 
   <filter-mapping> 
       <filter-name>filter</filter-name> 
       <!-- *                 /test.do  /xxx.do --> 
       <url-pattern>/*</url-pattern> 
   </filter-mapping> 

以上の例ではFilterの使用を簡単に説明したが,具体的な他のアプリケーションでは具体的なシーンを見ることができる. 
2.リスナー
今ではサーブレットのListenerといえばjavaxを実現しています.servlet.サーブレットContextListenerインタフェースのサーバ側プログラムは、ウェブアプリケーションの起動に伴って起動し、一度だけ初期化し、ウェブアプリケーションの停止に伴って破棄する.主な役割は、初期化されたコンテンツの追加作業、基本的なコンテンツの設定、パラメータや固定されたオブジェクトなどです.次に、Listenerによるデータベース接続プールのDataSourceの初期化の使用方法を説明します.
MyServletContextListener.java 
 package dc.gz.listeners; 
 import javax.servlet.ServletContext; 
 import javax.servlet.ServletContextEvent; 
 import javax.servlet.ServletContextListener; 
 import org.apache.commons.dbcp.BasicDataSource; 
  
  /** 
  * Web      
  */ 
 public class MyServletContextListener implements ServletContextListener {   
     //            
     public void contextDestroyed(ServletContextEvent event) { 
         ServletContext sc = event.getServletContext(); 
         //    web        ,                
         sc.removeAttribute("dataSource"); 
        System.out.println("      ..."); 
     } 
  
     //             
     public void contextInitialized(ServletContextEvent event) { 
         //                   
         //    web                       
         ServletContext sc = event.getServletContext(); 
         //          ;                 
         //   DataSource  ,      dbcp 
         BasicDataSource bds = new BasicDataSource(); 
         bds.setDriverClassName("com.mysql.jdbc.Driver");                       bds.setUrl("jdbc:mysql://localhost:3306/hibernate"); 
         bds.setUsername("root"); 
         bds.setPassword("root"); 
         bds.setMaxActive(10);//      
         bds.setMaxIdle(5);//      
         //bds.setMaxWait(maxWait);        
         //   DataSource   ServletContext   , 
         //    web     (       ) 
         sc.setAttribute("dataSource", bds); 
         System.out.println("            ..."); 
         System.out.println("    DataSource..."); 
     } 
 } 

web.xmlでは、以下のように構成されています.簡単です.
 <!--          --> 
   <listener> 
       <listener-class>dc.gz.listeners.MyServletContextListener</listener-class> 
   </listener> 

このように構成すれば、後でWebアプリケーションでサーブレットContextでBasicDataSourceオブジェクトを取得することができ、データベースへの接続を取得し、性能を向上させ、使いやすいようになります.
3.遮断器
ブロッカーは、フェース向けプログラミングに適用されます.サービスまたはメソッドの前にメソッドを呼び出すか、メソッドの後にメソッドを呼び出すことです.JAVAによる反射メカニズムです.ブロッキングはwebではありません.xml、例えばstrutsはstruts.xmlで構成し、
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
Object result = null;
System.out.println("before invoke method :" + method.getName());
result = method.invoke(this.targetObj, args);
System.out.println("after invoke method : " + method.getName());
return result;
}

まとめ:
1.フィルタ:フィルタとは、名前の通りフィルタリングに使用されます.java webでは、転送されたrequest、responseが事前に情報をフィルタリングしたり、パラメータを事前に設定したりして、servletやstrutsのactionに転送してビジネスロジックを行います.例えば、非法url(login.doのアドレスリクエストではありません.ユーザーがログインしていない場合はフィルタリングします).あるいはservletやstrutsのactionに伝わる前に文字セットを統一的に設定したり、不正な文字を削除したりします(チャットルームでよく使われている、悪口を言ったりします).filterの流れは線形である、urlが伝わった後、検査後、元の流れを維持して下に実行することができ、次のfilter、servletに受信するなどすることができる.
2.リスナー:これはc/sモードでよく使われ、特定のイベントに対して処理を生成します.リスニングは多くのモードで使用されます.例えば観察者モードは、傍受されたものです.例えばstrutsはリスニングで起動することができます.サーブレットリスナーは、重要なイベントの発生をリスニングするために使用され、リスナーオブジェクトは、イベントの発生前、発生後に必要な処理を行うことができます.
3.javaのブロッカーは主にプラグインに使われています.拡張子にはhivernate spring struts 2など、スライス向けの技術に似ています.使用する前に、プロファイルであるxmlファイルにセグメントを宣言します.