這個J2EE小提示闡述了ServletContextListener的用法。這個事件類作為Web應用服務的一部分,處理Web應用的 servlet上下文(context)的變化的通知。這可以解釋為,好像有個人在伺服器旁不斷地通知我們伺服器在發生什麼事件。那當然需要監聽者了。因 此,在通知上下文(context)初始化和銷毀的時候,ServletContextListner非常有用。
ServletContextListener接口有兩方需要實作的方法:contextInitialized()和contextDestroyed();
Listener,譯為監聽者.顧名思義,它會監聽Servlet容器,當應用開始的時候它會調用contextInitialized()方法;
當應用關閉的時候,它同樣會調用contextDestroyed()方法.
我們可以利用這個特性初始化一些資訊,當然我們也可以利用Servlet類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
-----------------------------------
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;
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();
--------------------------------
如果你沒有使用log4j的話,你可以把log.info()改為System.out.println()會得到同樣的結果.
本文轉自kenty部落格園部落格,原文連結http://www.cnblogs.com/kentyshang/archive/2007/06/26/795878.html如需轉載請自行聯系原作者
kenty