2012-01-18 21 views
-2

嗨,我在jsp頁面調用線程和該線程繼續運行我想終止此線程時,我將關閉jsp頁面如何可能?如何終止線程當Jsp頁面關閉,稱它爲JSP?

我的代碼把它放在正文標記的JSP,

<% 
Thread Ping=new PingThread(); 
Ping.Start(); 
%> 

由於提前

+3

在JSP中使用新線程並不是好主意,JSP是表示層。 – 2012-01-18 09:41:18

+2

這個可怕的想法。你爲什麼不直接告訴我們你到底在做什麼? – 2012-01-18 11:13:46

回答

5

你的意思是關閉它,當用戶關閉窗口?沒有爲此發生的事件,所以你不能這樣做。當用戶關閉窗口時,您可以通過JavaScript進行Ajax調用來實現此功能,但它可能無法正常工作。

想到的疑問是:爲什麼要做一個像在JSP頁面中啓動aad這樣的可怕事情?通過發送垃圾郵件F5按鈕,有人可以獲得歷史上最簡單的DOS攻擊!重新思考你的應用程序以避免這樣的解決方案(根據請求盲目地啓動線程,而不僅僅是從JSP實現)。

0

您可以使用Javascript beforeunloadunload事件來確定窗口正在關閉,但您使用哪一個,以及具體取決於您想要執行的操作。

3

如果您從JSP啓動線程,則無法保證當用戶退出該頁面時該線程將被停止。

  • 當用戶關閉或離開純HTML頁面時,沒有通知從客戶端發送到服務器。沒有任何。

  • 當用戶關閉窗口或移動到不同的頁面時,您可以在網頁中包含一些JavaScript以執行對您的服務器的AJAX調用。但是,有些情況下無法撥打電話;例如

    • 用戶的機器模具,

    • 用戶的瀏覽器崩潰,

    • 用戶已關閉JavaScript,

    • 用戶在代碼中設置斷點,

    • 等等。

    即使撥打電話,也不能保證它不會因爲暫時的網絡問題而丟失。

最終的結果將是你的服務器有一個孤立的線程會保持做什麼它做(在這種情況下,衝擊其他一些機器的ICMP報文),直到你殺你的Web容器。

這真是一個非常糟糕的主意。

-1

你可以將上述內容放在另一個循環中,該循環通過jsp頁面通過ajax調用按時設置爲true。如果jsp頁面沒有將值設置爲true,那麼您可以安全地假定瀏覽器已關閉。但是你需要爲你的線程標識符,比如說用戶的會話ID或IP。

+0

*「...那麼你可以安全地假設瀏覽器已關閉。」* - 這不是一個安全的假設。例如,可能只是出現了網絡中斷,或者用戶可能會讓他/她的機器進入休眠狀態。然而,OP可能認爲這些情景等同於關閉窗口。另一個問題是這種方法不能及時檢測到事件。 – 2012-01-19 00:57:20

0

由於Anthony Grist's answer says(有點),當瀏覽器檢測到當前瀏覽器窗口正在關閉時,您可以在您的網頁中嵌入JavaScript。有關DOM Events及其處理的更多詳情,請參閱此頁面。

注:

  • 這東西的作品的頁面是否是一個JSP。 (例如......如果頁面是純HTML的話,它將工作......假設服務器端有處理通知的東西)。

  • 在用戶Web瀏覽器中執行此事件處理

  • 除非事件處理程序向服務器發送(AJAX)請求以告知它,否則服務器端不會收到有關窗口關閉的消息。

  • 正如我在回答上一個問題時所說的,用戶可以在客戶端禁用事件處理。

  • 正如我在回答上一個問題時所說的那樣,並不能保證AJAX請求會真正將其返回到服務器。

  • 所有這些增加了事實,即窗口關閉事件的任何服務器端處理是不可靠。並沒有解決方案。不在理論上,也不在實踐中。