分兩步走:
(1)實作 javax.servlet.ServletContextListener 接口的兩個方法:contextInitialized()和contextDestroyed()
contextInitialized():當Servlet容器啟動時會執行contextDestroyed():當Servlet容器停止時會執行
(2)在contextInitialized()中加入需要監聽的程式,并由 java.util.Timer 的 schedule() 方法來控制監聽程式執行的頻率
DEMO(這是我的一個短信回複監聽的程式原型,精簡了一下)
----------------------------------------------------------------
ReplyListener.java
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) package com.hanweb.jcms;
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) import javax.servlet.*;
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) public class ReplyListener implements ServletContextListener {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) private ReplyTimer rt = null;
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) public void contextInitialized(ServletContextEvent event) {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) String status = "[SYS] SMS reply listener start .";
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) event.getServletContext().log(status);
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) System.out.println(status);
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) rt = new ReplyTimer(1);
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) rt.start();
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) }
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) public void contextDestroyed(ServletContextEvent event) {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) String status = "[SYS] SMS reply listener stop .";
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) if (rt != null) {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) rt.stop();
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) ReplyTimer.java
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) import java.util.*;
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) public class ReplyTimer {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) private final Timer timer = new Timer();
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) private final int min;
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) public ReplyTimer(int minutes) {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) min = minutes;
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) public void start() {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) Date date = new Date();
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) timer.schedule(new ReplyTask(), date, min * 60 * 1000);
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) public void stop() {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) timer.cancel();
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) ReplyTask.java
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) public class ReplyTask extends TimerTask {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) public void doSomething() {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) System.out.println("[SYS] SMS reply listener running ");
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) public void run() {
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) doSomething();
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask)
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) 将編譯好的class檔案放入WEB-INF/classes中,最後别忘記了在Servlet容器中目前WEB應用的web.xml中加入監聽語句:
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) <listener>
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) <listener-class>com.hanweb.jcms.ReplyListener</listener-class>
Java中用Servlet Listener實作定時監聽 (Timer、TimerTask) </listener>