Java中用Servlet Listener實現定時監聽 (Timer、TimerTask)
轉載自:http://www.zjsyc.com/blog/article/J2EE/318.html
package com.hanweb.jcms;

import javax.servlet.*;

public class ReplyListener implements ServletContextListener {
private ReplyTimer rt = null;
public void contextInitialized(ServletContextEvent event) {
String status = "[SYS] SMS reply listener start .";
event.getServletContext().log(status);
System.out.println(status);

rt = new ReplyTimer(1);
rt.start();
}

public void contextDestroyed(ServletContextEvent event) {
String status = "[SYS] SMS reply listener stop .";
event.getServletContext().log(status);
System.out.println(status);

if (rt != null) {
rt.stop();
}
}
}
----------------------------------------------------------------
ReplyTimer.java
----------------------------------------------------------------
package com.hanweb.jcms;

import java.util.*;

public class ReplyTimer {
private final Timer timer = new Timer();
private final int min;

public ReplyTimer(int minutes) {
min = minutes;
}

public void start() {
Date date = new Date();
timer.schedule(new ReplyTask(), date, min * 60 * 1000);
}

public void stop() {
timer.cancel();
}
}
----------------------------------------------------------------
ReplyTask.java
----------------------------------------------------------------
package com.hanweb.jcms;

import java.util.*;

public class ReplyTask extends TimerTask {
public void doSomething() {
System.out.println("[SYS] SMS reply listener running ");
}

public void run() {
doSomething();
}
}
將編譯好的class文件放入WEB-INF/classes中,最后別忘記了在Servlet容器中當前WEB應用的web.xml中加入監聽語句:
<listener>
<listener-class>com.hanweb.jcms.ReplyListener</listener-class>
</listener>
分兩步走:
(1)實現 javax.servlet.ServletContextListener 接口的兩個方法:contextInitialized()和contextDestroyed()
contextInitialized():當Servlet容器啟動時會執行contextDestroyed():當Servlet容器停止時會執行
(2)在contextInitialized()中加入需要監聽的程序,并由 java.util.Timer 的 schedule() 方法來控制監聽程序執行的頻率
DEMO(這是我的一個短信回復監聽的程序原型,精簡了一下)
----------------------------------------------------------------
ReplyListener.java
----------------------------------------------------------------

























----------------------------------------------------------------
ReplyTimer.java
----------------------------------------------------------------





















----------------------------------------------------------------
ReplyTask.java
----------------------------------------------------------------













將編譯好的class文件放入WEB-INF/classes中,最后別忘記了在Servlet容器中當前WEB應用的web.xml中加入監聽語句:


