1. 程式人生 > >如何在jsp中設定定時器

如何在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
資訊: 指定任務執行結束