『壹』 在java的Web開發過程中添加一個全局的定時器,如何處理
那就是所有打開的頁面共享數據咯
方案有二:
一、
1.每個頁面都添加定時器,
2.然後兩秒鍾或者5秒鍾用ajax訪問以下session,
如果session中的值比較小,就寫值進去,如果session中的值比較大,就讀值出來;這樣就保證了每個頁面上的計時器共享資源
二、與方案一唯一不同的一點就是,存值進cookie;
他們各有優缺點,
方案一的話:因為要計算請求時間,如果網速不好的話,就會有比較大的誤差。
方案二的話:必須的保證用戶的cookie沒有禁用,而實際上很多用戶的cookie都是禁用的。
個人比較喜歡第一種,如果真是沒人操作的話,那時間差一些也無關緊要,
又沒人看見。而且差的時間是多的,而不是少的,,多給用戶一些時間,說不定還能多拉一些用戶。
或者直接就不給給網速不好的用戶這項功能
再或者判斷網速不好的話就存cookie,如果cookie沒有開的話,就不管了
個人想法僅供參考
『貳』 java定時器使用
定時器類Timer在java util包中 使用時 先實例化 然後使用實例的schele(TimerTask task long delay)方法 設定指定的任務task在指定的延遲delay後執行 定時器任務類TimerTask是抽象類 繼承並重寫其run()方法 可實現具體任務 schele(TimerTask task Date time)設定指定任務task在指定時間time執行 cancel()方法結束這個定時器 schele(TimerTask task long delay long period)方法設定指定任務task在指定延遲delay後進行固定延遲peroid的執行 scheleAtFixedRate(TimerTask task long delay long period)方法設定指定任務task在指定延遲delay後進行固定頻率peroid的執行 要實現一個定時任務 運用java中的Timer和TimerTask類可以非常容易實現實時調用處理函數 這兩個類使用搭賀姿起來非常方便 可以完成我們對定時器的絕大多數需要 看個簡單的例子 import java io IOException; import java util Timer; public class TimerTest { public static void main(String[] args){ Timer timer = new Timer() timer schele(new MyTask() ) //在 秒後執行此任務 每次間隔 秒 如果傳遞一個Data參數 就可以在某個固定的時間執行這個任務 while(true){//這個是用來停止此任務的 否則就一直循環執行此任務了 try { int ch = System in read() if(ch c == ){ timer cancel() //使用這個方法退出任務 } } catch (IOException e) { // TODO Auto generated catch block e printStackTrace() } } } static class MyTask extends java util TimerTask{ @Override public void run() { // TODO Auto generated method stub System out println( ________ )} } } Servlet偵聽器結合Java定時器實現任務計劃調度[轉] 好多拍棗朋友用過Windows的任務計劃 也有不少程序迷自己曾寫過時鍾報警 系統自動關機等趣味程序 可卻很少有朋友在Web工程中實現過類似功能 今天有空把筆者先前曾在Tomcat上實現的類似功能 搬出來與大家共享 早在幾年前 我公司跟某市財政局合作項目開發 為加強財政局對所屬單位財務狀況的有效監管 開發 實施了財政局數據中心項目 此項目採用B/S加C/S混合結構模式 財政局Web伺服器上知絕架設數據同步接收裝置 由市屬單位每天下班前把財務信息通過HTTP協議上傳至財政局中心伺服器 與Web伺服器上的接收裝置對接 財政局內部各部門需要查閱大量財務信息 獲取完備的市屬單位當前財務狀況信息 各部門按職能劃分 需要准確的獲取各部門各自所關注的匯總信息 以財政報表的形式提供 因財政數據量大 實時計算財政報錶速度較慢 當初就考慮用報表緩存來減輕伺服器的負擔 但用緩存需要一個合理的緩存更新機制 考慮到各市屬單位每天下班前才把財務數據上傳 財政局每天所查看到的財務信息其實並不包括當天(除非有某位領導等到所屬單位全部上傳完之後才來查看信息 應該已經下班了) 所以要是能實現任務計劃調度 在每晚深夜把當天及歷史財務信息匯總 更新緩存 速度瓶頸不就解決了嗎 當時由於系統核心是基於Web部署的 報表計算引擎也相應的部署在Tomcat容器上 因此如果想要借用Windows的任務計劃來實現定時計算 就需要額外編寫普通桌面應用程序介面 稍顯復雜 於是就琢磨著想在Web上實現 經過查閱較多相關資料 發現Java定時器(java util Timer)有定時觸發計劃任務的功能 通過配置定時器的間隔時間 在某一間隔時間段之後會自動有規律的調用預先所安排的計劃任務(java util TimerTask) 另外 由於我們希望當Web工程啟動時 定時器能自動開始計時 在整個Web工程的生命期里 定時器能在每晚深夜觸發一次報表計算引擎 因此定時器的存放位置也值得考查 不能簡單的存在於單個Servlet或JavaBean中 必須能讓定時器宿主的存活期為整個Web工程生命期 在工程啟動時能自動載入運行 結合這兩點 跟Servlet上下文有關的偵聽器就最合適不過了 通過在工程的配置文件中加以合理配置 會在工程啟動時自動運行 並在整個工程生命期中處於監聽狀態 下面就Servlet偵聽器結合Java定時器來講述整個實現過程 要運用Servlet偵聽器需要實現javax servlet ServletContextListener介面 同時實現它的contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)兩個介面函數 考慮定時器有個建立和銷毀的過程 看了前面兩個介面函數 就不容置疑的把建立的過程置入contextInitialized 把銷毀的過程置入contextDestroyed了 我把ServletContextListener的實現類取名為ContextListener 在其內添加一個定時器 示例代碼如下所示(為考慮篇幅 僅提供部分代碼供讀者參考) private java util Timer timer = null; public void contextInitialized(ServletContextEvent event) { timer = new java util Timer(true) event getServletContext() log( 定時器已啟動 ) timer schele(new MyTask(event getServletContext()) * * ) event getServletContext() log( 已經添加任務調度表 ) } public void contextDestroyed(ServletContextEvent event) { timer cancel() event getServletContext() log( 定時器銷毀 )
} 以上代碼中 timer schele(new MyTask(event getServletContext()) * * )這一行為定時器調度語句 其中MyTask是自定義需要被調度的執行任務(在我的財政數據中心項目中就是報表計算引擎入口) 從java util TimerTask繼承 下面會重點講述 第三個參數表示每小時(即 * * 毫秒)被觸發一次 中間參數 表示無延遲 其它代碼相當簡單 不再詳細說明 下面介紹MyTask的實現 上面的代碼中看到了在構造MyTask時 傳入了javax servlet ServletContext類型參數 是為記錄Servlet日誌方便而傳入 因此需要重載MyTask的構造函數(其父類java util TimerTask原構造函數是沒有參數的) 在timer schele()的調度中 設置了每小時調度一次 因此如果想實現調度任務每 小時被執行一次 還需要判斷一下時鍾點 以常量C_SCHEDULE_HOUR表示(晚上 點 也即 點) 同時為防止 小時執行下來 任務還未執行完(當然 一般任務是沒有這么長的) 避免第二次又被調度以引起執行沖突 設置了當前是否正在執行的狀態標志isRunning 示例代碼如下所示 private static final int C_SCHEDULE_HOUR = ; private static boolean isRunning = false; private ServletContext context = null; public MyTask(ServletContext context) { ntext = context; } public void run() { Calendar cal = Calendar getInstance() if (!isRunning) { if (C_SCHEDULE_HOUR == cal get(Calendar HOUR_OF_DAY)) { isRunning = true; context log( 開始執行指定任務 ) //TODO 添加自定義的詳細任務 以下只是示例 int i = ; while (i++ < ) { context log( 已完成任務的 + i + / + ) } isRunning = false; context log( 指定任務執行結束 ) } } else { context log( 上一次任務執行還未結束 ) } } 上面代碼中 //TODO…… 之下四行是真正被調度執行的演示代碼(在我的財政數據中心項目中就是報表計算過程) 您可以換成自己希望執行的語句 到這兒 ServletContextListener和MyTask的代碼都已完整了 最後一步就是把ServletContextListener部署到您的Web工程中去 在您工程的web xml配置文件中加入如下三行 test ContextListener 當然 上面的 test得換成您自己的包名了 保存web xml文件後 把工程打包部署到Tomcat中即可 任務會在每晚 點至凌晨 點之間被執行 上面的代碼會在Tomcat的日誌文件中記錄如下 : : 開始執行指定任務 : : 已完成任務的 / …… : : 已完成任務的 / : : 指定任務執行結束 lishixin/Article/program/Java/hx/201311/25851
『叄』 我要做一個java web的定時器,需要隔一分鍾訪問一次資料庫,請問大神可以給個類似的Demo我嗎
方法一、java定時器Timer
<%
java.util.Timer timer = new java.util.Timer();
timer.schele(new TimerTask() {
public void run() {
try {
ref();//定時刷新的內容/方法,比如資料庫查詢顯示
} catch (Exception e) {
e.printStackTrace();
}
}
}, 0, 60000);//定時器,定時時間1分鍾(60000ms)
%>//注意需要導入包:java.util.*;
方法二、網頁刷新
在<head>里添加
<meta http-equiv=refresh content="60">
其實還有很多方法可以實現。比如java定時器就很多種方法可以實現。
『肆』 javaWeb中如何做倒計時
<input type="button" value="倒計時" id="button1"
onClick="timedMsg()">
<script type="text/javascript">
var c=5;
var t;
function timedMsg()
{
document.getElementById('button1').value="倒計時"+c;
document.getElementById('button1').disabled=true;
if(c==0){
clearTimeout(t);
window.location.href="url";//為跳轉地址
}else{
t=setTimeout('timedMsg()',1000);
}
c--;
}
</script>
點擊按鈕開始倒計時,當計時為0的時候跳轉
setTimeout設置多少時間調用函數,返回值用於清除定時器