在 Spring MVC 應用程式中,如果在功能運行時關閉頁面(瀏覽器視窗),它將停止應用程式和正在發生的處理,還是繼續在服務器上發生。
假設我有一個匯出 excel 報告的功能,我點擊匯出按鈕。現在有 2 種情況: 情況 1 - 如果我在不使用執行緒的情況下啟動報告生成,并在報告生成之前關閉視窗,它會拋出錯誤/或中止報告生成,或者該程序是否會繼續在服務器上發生并且報告將是下載了嗎?
案例 2)如果我使用執行緒啟動報告生成,并在生成報告之前關閉視窗,它會拋出錯誤/或中止報告生成,或者執行緒會繼續在后臺作業并下載報告嗎?
uj5u.com熱心網友回復:
簡短的回答是否定的,關閉瀏覽器選項卡或視窗不會影響服務器上正在發生的處理(除非此處理還涉及與客戶端的 I/O)。
通常,托管 Spring MVC 應用程式的 Servlet 容器(例如 Tomcat)有一個內置的執行緒池來為 http 請求提供服務。一旦請求到達,這些執行緒之一將處理它。如果與此同時,客戶端關閉了 TCP 連接(希望1在關閉瀏覽器選項卡或視窗時會發生這種情況),則不會以任何方式通知或中斷執行緒。因此,服務器端可能發生的任何處理都將繼續。我是否使用另一個執行緒進行處理并不重要。在這兩種情況下,服務器上的處理都將繼續。
由于您特別詢問“下載”報告檔案,這里有一些更多資訊:下載涉及與客戶端的 I/O。如果您在下載開始之前關閉選項卡或瀏覽器,服務器會在嘗試將資料寫入回應時立即收到錯誤訊息。所以檔案不會被下載,資料不會被傳輸。如果在下載開始后關閉選項卡,檔案將正常下載。如果用戶取消檔案下載,那么服務器將再次出錯并且資料傳輸將停止。
在任何情況下,如果報告的生成發生在將資料發送回客戶端之前,則生成將繼續在后臺作業,無論您是否使用執行緒。
1我說希望是因為確切的行為取決于作業系統/設備/瀏覽器。關閉 TCP 連接將是預期的行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425496.html
上一篇:如果應用程式在SpringMVC中關閉并再次啟動,是否會在WebApplicationContext中創建一個新的Singleton范圍物件實體
