2010-03-14 46 views
1

我一直在玩Java Servlets和Ajax,並且我有 這種情況,在這種情況下我會非常感謝您的建議。在java servlets中停止doGet/dopost?

比方說,我有HTML頁面啓動和停止按鈕,並且單擊開始按鈕的結果,
覆蓋的doGet(或doPost)上一個servlet調用方法,其計算的東西,需要很長的時間才能完成。 (例如巨大的循環,甚至無限循環,無所謂,我對這裏的概念很感興趣)。

所以,我要問你:

1.什麼是我的選擇,以殺/關機/停止/退出 doGet方法煥我打一個網頁上停止按鈕? 我在這裏使用線程,還是有更簡單的方法? 我認爲使用系統退出不是一個好主意,對吧? ;)

2.So,假設我實現了停止doGet方法的代碼。 會發生什麼如果我在一個瀏覽器(例如IE)上點擊開始,並且在計算髮生這個較長的計算時打開新標籤頁或其他瀏覽器(例如Firefox)並打開相同的URL 並點擊停止?這會阻止我原來的計算嗎?有沒有簡單的方法來避免這種情況?

我知道問題有點不對,因爲我剛開始使用服務器端的東西。 :)

任何建議將不勝感激!

回答

2

您的停止處理程序可以在會話上下文中設置一個標誌,長時間運行的線程偶爾會檢查並在必要時退出。

您可以通過在每次加載頁面時生成唯一的任務ID來避免多瀏覽器問題。那麼你只能開始或停止一個特定的任務。此ID可以是會話中的關鍵。

+0

正確,除了沒有粘滯會話的羣集環境。必須使用分佈式緩存或數據庫等共享對象來傳遞標誌。 – 2010-03-15 00:00:06

0

我認爲你需要某種在你提交請求後開始的新進程,這個過程應該在運行時回答響應(例如通過AJAX顯示進度)。還應該檢查是否有停止命令的新請求。頁面應該是帶有進度/結果/停止按鈕的AJAX。