如何在jsp中設定定時器
定時器是我們經常使用到的工具,那麼如何在開發網站時使用定時器呢?下面就以jsp為例進行講解:
定時器可以在指定的時間,指定週期內完成指定的指令,對於定期的進行操作非常有用;設定定時器的方式有許多種,本例中使用的是javax.servlet.ServletContextListener和java.util.Timer來實現;
對於javax.servlet.ServletContextListener介面,定義例項ContextListener繼承ServletContextListener,重寫contextInitialized(ServletContextEvent event)()和contextDestroyed(ServletContextEvent event) ()方法,具體程式碼如下:
ContextListener類
import:java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ContextListener implements ServletContextListener {
private Timer mTimer = null;
// 引數為空的構造方法
public ContextListener() {
}
/*
*
* 當Tomcat啟動時,會將contextInitialized方法加入伺服器,並執行相應的方法;
*
* @see
* javax.servlet.ServletContextListener#contextInitialized(javax.servlet
* .ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent event) {
// 設定一個定時器;
mTimer = new Timer(true);
event.getServletContext().log("定時器已經啟動");
// 定時器定時到指定時間,執行相應的方法或類;
mTimer.schedule(new MyTask(event.getServletContext()), 0, 60 * 1000 * 60);
event.getServletContext().log("加入時間排程表");
}
/**
* 當Tomcat停止時自動退出
*/
public void contextDestroyed(ServletContextEvent event) {
mTimer.cancel();
System.out.println("定時器已經銷燬");
event.getServletContext().log("定時器已經銷燬");
}
}
紅色字型處是例項化了要執行的任務類,要執行的方法就在其中;黃色部分即要設定的時間週期,例如我需要1小時執行一次,即60*1000*60;
MyTask類:
import java.util.TimerTask;
import javax.servlet.ServletContext;
public class MyTask extends TimerTask {
private ServletContext mContext = null; // 設定Context上下文;
private static boolean isRunning = false;
private static int count = 0;
public MyTask(ServletContext context) {
this.mContext = context;
}
@Override
public void run() {
if (!isRunning) {
isRunning = true;
mContext.log("開始執行指定任務");
//此處寫你要執行的指令
System.out.println(count++);
isRunning = false;
mContext.log("指定任務執行結束");
} else {
mContext.log("還未執行完");
}
}
}
最後,要在web.xml中加上定時器的路徑;
<listener>
<listener-class>sdau.edu.test.timer.ContextListener</listener-class>
</listener>
將網站部署到Tomcat上該定時器就可以執行;執行如下;
2015-1-15 17:37:53 org.apache.catalina.core.ApplicationContext log
資訊: 定時器已經啟動
0
2015-1-15 17:37:53 org.apache.catalina.core.ApplicationContext log
資訊: 加入時間排程表
2015-1-15 17:37:53 org.apache.catalina.core.ApplicationContext log
資訊: 開始執行指定任務
2015-1-15 17:37:53 org.apache.catalina.core.ApplicationContext log
資訊: 指定任務執行結束