Javaweb三大コンポーネントのListener

3319 ワード

1.Listenerの一般化概念
名前の通りListenerはListenerであり、主にサーブレットContext、HttpSession、サーブレットRequestの3つのドメインオブジェクトの作成と破棄、さらにドメインオブジェクトのプロパティの操作をリスニングし、これらのイベントが発生した場合に適切な操作を行う.
ドメイン固有のプロパティ操作のリスニングでは一般的に使用されることは少なく、主にこの3つのドメインオブジェクトのリスナーについて説明します.
2.Javaweb四大ドメインオブジェクト
ドメインオブジェクト                     アクティブドメイン
PageContext         現在のjsp
ServletRequest      現在のHTTPリクエスト
HttpSession           現在のセッション
ServletContext       Webサーバのライフサイクル全体
上は役割ドメインに従って小さいものから大きいものまで並べられています.
3. サーブレットContextListenerの説明
サーブレットContextListenerは、主にタスクスケジューリングおよびSpringコンテナの初期化に使用されます.
実装クラス:
public class ServletContextListenerDemo implements ServletContextListener{
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext sc = sce.getServletContext();
        System.out.println("ServletContextInitParams: "+sc.getInitParameter("ServletContextParam"));
        System.out.println("ServletContextListenerDemo has been created");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContextListenerDemo hase been destroyed");
    }
}

サーブレットContextListenerインタフェースを実装し、必要に応じて初期化と破棄の2つの方法を書き換えることで、サーブレットContextEventオブジェクトはサーブレットContextオブジェクト、具体的には他のapiを取得できます.
xml構成:
 
        com.lyh.Listener.ServletContextListenerDemo
 

4.HttpSessionListenerの紹介
HttpSessionListenerは、sessionが唯一であるため、リアルタイムのオンライン人数を統計するために使用できるHttpSessionというドメインオブジェクトをリスニングします.
全体は前のサーブレットContxtListenerと連携して使用する必要があり、まずサーブレットContextListenerを使用してサーブレットContextの作成時に属性count=0を加えて現在のオンラインの人数を表し、SessionリスナーでSessionの作成を傍受し、Sessionの作成のたびにカウントを加算し、破棄するとカウントを1つ減らす.
サーブレットContextListenerにコードを追加
@Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext sc = sce.getServletContext();
        sc.setAttribute("count", 0);
    }

HttpSessionListenerコード
public class HttpSessionListenerDemo implements HttpSessionListener{
    private Integer count;

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("session has been created"+se.getSession().getId());
        ServletContext sc = se.getSession().getServletContext();
        count = (Integer) sc.getAttribute("count");
        synchronized (sc){
            sc.setAttribute("count", count+1);
        }
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext sc = se.getSession().getServletContext();
        count = (Integer) sc.getAttribute("count");
        synchronized (sc) {
            sc.setAttribute("count", count - 1);
        }
        System.out.println("session has been destroyed");
    }
}

xml構成を忘れないでください

        com.lyh.Listener.HttpSessionListenerDemo

これにより、jspでsessionテストを作成および破棄するだけでよい.
5.サーブレットRequestListenerの説明
このListenerは相対的に使用が少なく、具体的な使用方法は前の2つのListenerと同じで、初期化と破棄方法を書き換えてxml構成を追加すればよい.サーブレットRequestオブジェクトのライフサイクルは1回のリクエストであるため、リクエストが終了すると破棄され、一般的にListener用は少なく、オブジェクト用が多い.