サーブレットContextListener HttpSessionListenerインタフェースの実装と応用
サーブレットContextListenerインタフェースには、contextInitialized()とcontextDestroyed()の2つの方法があります.
Listener、リスナーと訳す.名前の通り、サーブレットコンテナはリスニングされ、アプリケーションが開始されるとcontextInitialized()メソッドが呼び出されます.アプリケーションが閉じると、contextDestroyed()メソッドも呼び出されます.
この特性を利用して、いくつかの情報を初期化することができます.もちろん、サーブレットクラスinit()メソッドを利用して、プロファイルでアプリケーションを起動させるときに実行し、閉じるときにdestroy()メソッドを実行することもできます.しかし、このインタフェースを継承することは、容器の応用にもっと適合するべきである.
簡単な例を挙げると、一部のフォーラム、コミュニティ、チャットルームでは、オンラインを削除するタイムアウトユーザーがこのインタフェースを利用して実現することができる.JAVAのTimerTaskおよびTimer類を利用する一定時間毎の自動検出を実現することができる.インスタンスコードは次のとおりです:UserOnlineTimerTask.java-----------------package com.bcxy.servlet;
import java.util.TimerTask;
import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;
public class UserOnlineTimerTask extends TimerTask {
Log log = LogFactory.getLog(UserOnlineTimerTask.class);public void run(){//タイムアウトオンラインユーザーlog.info(「オンラインのタイムアウトユーザーを削除...」);
}
}------------------------------------------------------------------------SysListener.java-----------------------------------package com.bcxy.servlet;
import java.io.IOException;import java.util.Timer;
import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServlet;
import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;
public class SysListener extends HttpServlet implements ServletContextListener {Log log = LogFactory.getLog(SysListener.class);Timer timer = new Timer();
public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException {//}public void contextInitialized(ServletContextEvent sce) {log.info("initial context....");timer.schedule(new UserOnlineTimerTask(), 0, 10000);
}public void contextDestroyed(ServletContextEvent sce) {log.info("destory context....");
timer.cancel();}
}------------------------------log 4 jを使用していない場合は、logを使用することができます.info()をSystemに変更します.out.println()は同じ結果を得る.
Web.xml:クラスパスを/WEB-INF/webに追加します.xmlファイルのラベルには、サーバにリスニングクラスが表示されます.下はwebです.xmlファイルの例:
上記のように、web.xmlファイルでリスニングクラスを宣言するのは簡単です.これで、サーバの起動と停止、セッションの作成と失効のたびに、構成されたリスニングクラスの対応するメソッドが呼び出されます.簡単だ!
2.HttpSessionListener :
セッションの作成と失効
Session作成イベントは、新しいsessionが作成されるたびに発生し、同様にSession失効イベントは、1つのSessionが失効するたびに発生する.
このインタフェースには、Sessionの作成と失効に対応する2つのメソッドしか含まれていません. public void sessionCreated(HttpSessionEvent se); public void sessionDestroyed(HttpSessionEvent se);上記のApplicationWatchの例のように、HttpSessionListenerインタフェースを実装するクラスも作成しました.次のようになります:/*File:SessionCounter.java*/import javax.servlet.http.HttpSessionListener;import javax.servlet.http.HttpSessionEvent;public class SessionCounter implements HttpSessionListener{private static int activeSessions=0;/*Session作成イベント*/public void sessionCreated(HttpSessionEvents){activeSessions+;}/*Session失効イベント*/public void sessionDestroyed(HttpSessionEvent se){if(activeSessions>0)activeSessions-;}public static int getActiveSessions() {return activeSessions;}}上のコードでは、セッションCounterクラスは、アクティブセッションの数を計算するためのHttpSessionListenerインタフェースを実現しています.
Listener、リスナーと訳す.名前の通り、サーブレットコンテナはリスニングされ、アプリケーションが開始されるとcontextInitialized()メソッドが呼び出されます.アプリケーションが閉じると、contextDestroyed()メソッドも呼び出されます.
この特性を利用して、いくつかの情報を初期化することができます.もちろん、サーブレットクラスinit()メソッドを利用して、プロファイルでアプリケーションを起動させるときに実行し、閉じるときにdestroy()メソッドを実行することもできます.しかし、このインタフェースを継承することは、容器の応用にもっと適合するべきである.
簡単な例を挙げると、一部のフォーラム、コミュニティ、チャットルームでは、オンラインを削除するタイムアウトユーザーがこのインタフェースを利用して実現することができる.JAVAのTimerTaskおよびTimer類を利用する一定時間毎の自動検出を実現することができる.インスタンスコードは次のとおりです:UserOnlineTimerTask.java-----------------package com.bcxy.servlet;
import java.util.TimerTask;
import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;
public class UserOnlineTimerTask extends TimerTask {
Log log = LogFactory.getLog(UserOnlineTimerTask.class);public void run(){//タイムアウトオンラインユーザーlog.info(「オンラインのタイムアウトユーザーを削除...」);
}
}------------------------------------------------------------------------SysListener.java-----------------------------------package com.bcxy.servlet;
import java.io.IOException;import java.util.Timer;
import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServlet;
import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;
public class SysListener extends HttpServlet implements ServletContextListener {Log log = LogFactory.getLog(SysListener.class);Timer timer = new Timer();
public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException {//}public void contextInitialized(ServletContextEvent sce) {log.info("initial context....");timer.schedule(new UserOnlineTimerTask(), 0, 10000);
}public void contextDestroyed(ServletContextEvent sce) {log.info("destory context....");
timer.cancel();}
}------------------------------log 4 jを使用していない場合は、logを使用することができます.info()をSystemに変更します.out.println()は同じ結果を得る.
Web.xml:クラスパスを/WEB-INF/webに追加します.xmlファイルのラベルには、サーバにリスニングクラスが表示されます.下はwebです.xmlファイルの例:
<!-- Web.xml -->
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-appPUBLIC "-//Sun Microsystems,
Inc.//DTD Web Application 2.3
//EN""http://java.sun.com
/j2ee/dtds/web-app_2.3.dtd">
<web-app>
<!-- Listeners -->
<listener>
<listener-class>
com.stardeveloper.web.listener.SessionCounter
</listener-class>
</listener>
<listener>
<listener-class>
com.bcxy.servlet.
SysListener </listener-class>
</listener>
</web-app>
上記のように、web.xmlファイルでリスニングクラスを宣言するのは簡単です.これで、サーバの起動と停止、セッションの作成と失効のたびに、構成されたリスニングクラスの対応するメソッドが呼び出されます.簡単だ!
2.HttpSessionListener :
セッションの作成と失効
Session作成イベントは、新しいsessionが作成されるたびに発生し、同様にSession失効イベントは、1つのSessionが失効するたびに発生する.
このインタフェースには、Sessionの作成と失効に対応する2つのメソッドしか含まれていません.