2014-05-13 16 views
0

在加載jsp之前,必須執行繁重的數據庫過程。如何使進度條與服務器代碼同步工作?

// jsp 
<% new bean().startHeavyProcess(); %> 
. 
. 
. 

由於過程是怎麼回事,我想顯示progress bar使用java script。有什麼辦法可以使進度條與服務器端代碼同步嗎?我可以知道服務器端代碼何時完成執行或即將完成執行嗎?

回答

2

沒有你建立功能來實現這個特定於你的應用程序,沒有辦法做到這一點。

我假設重處理是由客戶端點擊鏈接發起的?

如果是這樣,那麼你可以嘗試以下。

  1. 用戶點擊啓動重處理的鏈接。
  2. 服務器返回與上面相同的請求中啓動的進程的唯一標識。
  3. 創建一個單獨的界面,您可以通過id查詢特定進程的進度。
  4. 使用JavaScript查詢接口每隔1秒就知道多遠沿着過程已經
  5. 顯示進度條到用戶(也許更換一個進度條原始鏈接)
  6. 當過程是在100%將用戶重定向到新一頁。

這種方法要求你有某種重型流程管理器具有所有正在運行的進程的知識,可以從這些提取物的方法..

這或許可以通過創建一個新的表來完成您的數據庫中存儲進程唯一標識和每個進程的進度百分比。每個進程都會在進程中更新其表中的行,並且只需在其ID請求時從表中返回進度值。

如果您尋找一個良好的進度條插件jQuery有它:http://jqueryui.com/progressbar/ :)

1

我用

function pollProgress() { 
    setTimeout(function() { 
    int progress = queryServerProgress(); 
    if(progress < 100) { 
     pollProgress(); 
    } 
    }, 1000) 
} 

和查詢的當前進度的服務器這樣做。觸發相同的查詢/更新功能,只要進度爲< 100%。

雖然您需要跟蹤服務器端的進度。

1

我們有一個類似的用例,我們通過使用REST API定期檢查狀態來實現。當服務器端的任務正在進行時,服務器將更新內存中的狀態以及客戶端對API進度的請求。