Servlet Conteext Listenerの使い方


このJ 2 EEヒントはServlet Contactext Listenerの使い方を述べています。このイベントクラスはWebアプリケーションサービスの一部として、Webアプリケーションのservletコンテキストの変化を処理する通知である。これは、サーバーのそばで何かあったかをサーバーに連絡してくれている人がいるようです。もちろんモニターが必要です。したがって、コンテキストを通知して初期化と廃棄を行うとき、Servlet Contect Listnerは非常に有用である。

package com.listeners;
import javax.servlet.ServletContextListener;

import javax.servlet.ServletContextEvent;
import javax.servlet.*;
public class MyContextListener implements ServletContextListener {
private ServletContext context = null;

 public void contextDestroyed(ServletContextEvent event){
  //Output a simple message to the server's console
  System.out.println("The Simple Web App. Has Been Removed");
  this.context = null;
}
 //      Web                。
public void contextInitialized(ServletContextEvent event){
  this.context = event.getServletContext();
  //Output a simple message to the server's console
  System.out.println("The Simple Web App. Is Ready");
}
}
WEB.XMLで

<web-app>
<listener>
  <listener-class>
   com.listeners.MyContextListener
  </listener-class>
</listener>
<servlet/>
<servlet-mapping/>
</web-app>
Servlet Contactext Listenerインターフェースは両方の必要な実装方法があります。
context Initialized()とcontext Destroyed()
Listenerは、モニターと訳されます。名前の通りServlet容器を監督します。アプリケーションが開始されると、それはcontext Initialized()方法を呼び出します。
アプリケーションがクローズされると、それはcontext Destroyed()メソッドを呼び出します。
この特性を利用して情報を初期化することができます。もちろん、Servlet類init()方法を利用して、設定ファイルでアプリケーションを起動させることもできます。
実行し、クローズするときにdestry()を実行しますが、このインターフェースを継承するのは容器の応用にもっと適しているはずです。
簡単な例を挙げると、いくつかのフォーラム、コミュニティとチャットルームの中で、オンラインを削除するタイムアウトのユーザーはこのインターフェースを利用して実現することができます。
JAVAのTimerTaskおよびTimer類を利用して、一定時間ごとに自動検出が可能です。
実例コードは以下の通りです
UserOnline TimerTask.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();
}

}
ロゴ4 jを使っていないなら、ログ.info()をSystem.out.printl()に変更してもいいです。