接近

2011-11-21 82 views
-1

頁上的停止JSP處理我有這個頁面:接近

<%@page language="java"%> 
<html> 
    <head></head> 
    <body> 
     <% while(true) System.out.println("foo"); %> 
    </body> 
</html> 

,我希望當我關閉瀏覽器,會話到期之前停止該頁面執行。

我的想法是使用JavaScript捕獲onunload事件,使用AJAX將線程ID回發到servlet /另一個JSP,並在一段時間後(即15秒)殘酷地終止線程。

這是正確的嗎?可能嗎?有什麼更好的想法

+1

爲什麼你會有這樣的JSP頁面? – BalusC

+0

這是一個簡化,我有一些jsp/servlets在數據庫上執行長時間運行的過程,處理圖形。有時我需要在這些程序自然完成之前停止,有時我希望這些程序與客戶綁定,因爲如果客戶斷開連接,就無法查看結果...所以寶貴的資源完全被浪費了...... –

+0

在Java EE環境中手動產生非託管線程是非常糟糕的做法。如果您有100個甚至更少的訪問者同時執行此操作,則必須重新啓動服務器,因爲它完全被鎖定。相反,您應該使用具有任務隊列的固定線程池和執行程序服務。大多數容器都支持這個功能。對於一些指針,請檢查這些答案:http://stackoverflow.com/q/5357856和http://stackoverflow.com/q/6151574 – BalusC

回答

0

你可以哈瓦JSP頁面已停止從客戶端異步收到的消息後寫,如:網頁那張寫

1),如你所提到的。

2)每寫完一次,它就可以檢查消息隊列或數據庫,以指示它應該停止流數據。由於JSP運行到服務器,它沒有任何連接到客戶端,所以這個檢查必須與瀏覽器分離。

但是,根據評論---它不清楚這是必要的。

+0

由於我的應用程序是非常大的,這不是一個有效的路線。我正在尋找一些「黑客」來普遍適用於每一個現有的程序。另一件我不明白的事情是,如果'out.print()'不會失敗,即使客戶端正在監聽不到更多... –

+0

它可能是一個有效的解決方案(非常髒但仍然有效)if 'out.print()'會拋出Exception,因爲這些循環中的大部分都是使用'out.print()'的「報告」 –