

下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1好多朋友用過Windows的任務計劃,也有不少程序迷自己曾寫過時鐘報警、系統自動關機等趣味程序,可卻很少有朋友在Web工程中實現過類似功能。當Web工程啟動時,定時器能自動開始計時,在整個Web工程的生命期里,定時器能在每晚深夜觸發一次任務。因此定時器的存放位置也值得考查,不能簡單的存在于單個Servlet或JavaBean中,必須能讓定時器宿主的存活期為整個Web工程生命期,在工程啟動時能自動加載運行。結合這兩點,跟Servlet上下文有關的偵聽器就最合適不過了,通過在工程的配置文件中加以合理配置,會在工程啟動時自動運行,并在整個工程生命期中處于監聽狀態。下面就Servlet偵聽器結合Ja
2、va定時器來講述整個實現過程。要運用Servlet偵聽器需要實現javax.servlet.ServletContextListener接口, 同時實現它的contextInitialized(ServletContextEventevent)和contextDestroyed(ServletContextEventevent)兩個接口函數。考慮定時器有個建立和銷毀的過程,看了前面兩個接口函數,就不容置疑的把建立的過程置入contextInitialized,把銷毀的過程置入contextDestroyed了。我把ServletContextListener的實現類取名為ContextList
3、ener在其內添加一個定時器,示例代碼如下所示:importjava.util.Timer;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServlet;publicclassContextListener
4、extendsHttpServletimplementsServletContextListenerpublicContextListener()privatejava.util.Timertimer=null;publicvoidcontextInitialized(ServletContextEventevent)timer=newjava.util.Timer(true);event.getServletContext().log(定時器已啟動”);timer.schedule(newMyTask(event.getServletContext(),0,60*60*1000);event
5、.getServletContext().log(已經添加任務調度表);publicvoidcontextDestroyed(ServletContextEventevent)timer.cancel();event.getServletContext().log(定時器銷毀”);2以上代碼中,timer.schedule(newMyTask(event.getServletContext(),0,60*60*1000)這一行為定時器調度語句,其中MyTask是自定義需要被調度的執行任務(在我的財政數據中心項目中就是報表計算引擎入口),從java.util.TimerTask繼承,下面會重點講
6、述,第三個參數表示每小時(即60*60*1000毫秒)被觸發一次,中間參數0表示無延遲。其它代碼相當簡單,不再詳細說明。下面介紹MyTask的實現,上面的代碼中看到了在構造MyTask時,傳入了javax.servlet.ServletContext類型參數,是為記錄Servlet日志方便而傳入,因此需要重載MyTask的構造函數(其父類java.util.TimerTask原構造函數是沒有參數的)。在timer.schedule()的調度中,設置了每小時調度一次,因此如果想實現調度任務每24小時被執行一次, 還需要判斷一下時鐘點,以常量C_SCHEDULE_HOUR表示(晚上12點,也即0點
7、)。同時為防止24小時執行下來,任務還未執行完(當然,一般任務是沒有這么長的。,避免第二次又被調度以引起執行沖突,設置了當前是否正在執行的狀態標志isRunning。示例代碼如下所示:importjava.util.*;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse
8、;importjavax.servlet.http.HttpServlet;importjavax.servlet.*;publicclassMyTaskextendsTimerTaskprivatestaticfinalintC_SCHEDULE_HOUR=0;privatestaticbooleanisRunning=false;privateServletContextcontext=null;publicMyTask()publicMyTask(ServletContextcontext)this.context=context;publicvoidrun()Calendarcal=C
9、alendar.getInstance();if(!isRunning)if(C_SCHEDULE_HOUR=cal.get(Calendar.HOUR_OF_DAY)isRunning=true;context.log(開始執行指定任務);/TODO添加自定義的詳細任務,以下只是示例/系統定時接收郵件Emailemail=newEmail();email.recieve();isRunning=false;context.log(”指定任務執行結束);else3context.log(上一次任務執行還未結束”);到這兒,ServletContextListener和MyTask的代碼都已完整了。最后一步就是把ServletContextListen
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微生物檢驗技術人員的職業素養與試題及答案
- 童車制造企業生產調度與優化練習考核試卷
- 室外拱形廊道施工方案
- 垃圾運輸防滲漏施工方案
- 2025年【光氣及光氣化工藝】模擬考試題及答案
- 移動通信技術在智慧工廠行業的應用考核試卷
- 項目材料采購的試題及答案
- 2024年花藝師考試的學習方法與技巧試題及答案
- 畜牧業綠色發展政策建議考核試卷
- 紙張表面裝飾技術的創新與發展考核試卷
- 2024北京一零一中初二(下)期中數學試題及答案
- 2025-2030中國考試系統行業市場發展現狀分析及發展趨勢與投資前景研究報告
- GB/T 45456-2025包裝折疊紙盒折痕挺度的測定
- 國企薪酬福利體系與市場化改革
- 2025年保安員職業技能考試筆試試題(700題)附答案
- 2025屆江蘇省江陰市四校高三下-第四次月考數學試題試卷
- 2025年04月國家稅務總局稅務干部學院公開招聘事業單位工作人員36人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025年鄭州理工職業學院高職單招職業技能測試近5年??及鎱⒖碱}庫含答案解析
- Unit 4 Healthy food B Lets learn(教學設計)-2024-2025學年人教PEP版(2024)英語三年級下冊
- 《知不足而后進 望山遠而力行》期中家長會課件
- 《自由飛翔之鳥》教學課件-2024-2025學年嶺南美版(2024)初中美術七年級下冊
評論
0/150
提交評論