2014-02-15 40 views
0

我們有一個向servlet提交請求的jsp頁面。但是servlet必須在大量文件中進行搜索,並且需要時間。與此同時,如果客戶端關閉,servlet仍在搜索,這是對我們資源的浪費。無論如何,我們可以知道客戶端是否仍在等待響應?例如:我們應該從servlet知道我們的jsp頁面是否關閉,以便我們可以停止搜索。無論如何,我們從servlet知道客戶端是否還在等待

+0

我把它不可能,因爲一旦請求發送到服務器它不可能同時檢查客戶端是否可用。 – Kick

+0

這聽起來像是一個設計問題。如果您的Web請求產生了長時間運行的任務,那麼最好將其異步執行(針對Web請求),然後將結果呈現給Web。不知道更多關於你想要做什麼的事情很難確定。 – matthudson

回答

2

Http是一種無狀態協議。所以在技術上沒有連接狀態來檢查。但是,以下是您如何模擬連接狀態。

您需要在服務器和客戶端(網絡瀏覽器)上添加處理。

在服務器上,您可以在會話對象中存儲聽到節拍的值。心跳意味着上次客戶發出請求的時間戳。你建立一個閾值。比方說10秒。如果客戶端(網絡瀏覽器)超過10秒沒有發送心跳信息,則放棄進程。

在客戶端(網絡瀏覽器)上,您可以使用JavaScript每隔10秒發送一次心跳信息。使用Ajax將消息發送到服務器。這又告訴服務器客戶端還在等待。

注意!您需要確保在服務器上建立會話。服務器需要在會話範圍內存儲熱量節拍消息。客戶端每個會話將有多個請求。

最後,JSP是一個servlet。 JSP是編寫servlet的另一種方式。您的容器(例如Tomcat)將JSP編譯到servlet中。 JSP在服務器上運行,不會在Web瀏覽器中運行。是的,您可以從servlet(或JSP)將Javascript和HTML發送到Web瀏覽器。

希望有所幫助。 祝你好運。

+0

您的解決方案看起來可行。我會嘗試和更新。感謝您對此作出迴應。 – user2031973

+0

很高興有幫助:)請考慮接受我的回答(I.E.將我的答案標記爲已接受)。僅供參考 - 這可能需要一點點,但我現在描述的模式工作。我在製作中看到它:) – lorinpa

+0

不好意思問你這個。我在javascript/ajax中不太好。是否有任何示例可以引用將心跳發送到我的servlet。 – user2031973

相關問題