2009-09-12 8 views
22

我想了解在哪裏可以爲到達我的servlet(或我的所有servlet)的所有請求配置請求超時?就我看來,這是一個容器屬性嗎? 此外,這是如何影響不同的瀏覽器?他們是否都遵守容器規定的參數? 或者請求超時時間甚至不是我可以控制的事情,每個瀏覽器都可以自行決定? (只是要清楚我不是在談論會話超時)如何在Java servlet容器上指定Http請求超時參數

+1

不錯的問題。我已閱讀您對最後一個答案的評論,並且想知道您選擇了哪種方法來確保請求未關閉。我試圖自己製作彗星,但不知道如何做出正確的選擇。你能否提出一個解決方案?謝謝! – Dragos 2012-05-16 13:54:56

+0

@Dragos我結束了一個實現簡單的長輪詢機制,它在約29秒後(即小於30秒[IE限制])將請求返回給用戶。如果我面臨同樣的問題,我現在要做的就是嘗試使用websockets api。 – Ittai 2012-05-16 14:05:31

+0

所以你在這裏尋找一個超時,這樣「在時間x」它刷新當前響應並殺死當前線程,以便瀏覽器足夠快地接收數據? FWIW瀏覽器似乎等待了「許多分鐘」的響應... – rogerdpack 2017-07-28 18:45:33

回答

14

在客戶端確定客戶端的超時(即等待響應HTTP請求的時間)。對於IE,請參閱this,對於Firefox,請參閱this

您無法從服務器控制此超時。

+0

首先感謝您的回覆,這不能在客戶端(通過JavaScript)的編程方式改變吧? – Ittai 2009-09-12 10:36:46

+0

我不這麼認爲,不。 – 2009-09-12 12:21:26

2

您無法控制服務器的客戶端超時。但是,當您的長時間運行操作繁忙時,您可能偶爾會將數據發送回客戶端。這將防止客戶端超時並可用於向用戶顯示進度等。將數據寫入OutputStream或Writer從響應中獲得並調用flush以將部分數據發送到客戶端。

+0

如果使用xmlHttpRequest,如何獲得這部分數據? 我讀過比在IE中你不能訪問數據,直到請求完成 – Ittai 2009-09-12 10:51:47

+1

是的,但只要有數據進來,客戶端就不應該超時。 – 2009-09-12 12:22:15

+0

你是對的,但它有點複雜,因爲我正在實施彗星,所以我要麼使用「長輪詢」,因此需要更長的超時時間來保存請求或使用Streaming,這正是我通過David所建議的。無論如何謝謝你。 – Ittai 2009-09-12 12:25:34

5

即使你無法控制客戶端超時,可以使服務器很不耐煩:)例如,在Tomcat上,您可以在連接器做到這一點,

<Connector port="8080" 
    ... 
    connectionTimeout ="5000" 
    disableUploadTimeout="false" /> 

這使得服務器只等待5秒鐘並關閉連接。瀏覽器將得到連接關閉錯誤。您可以將其視爲與客戶端中的超時相同。

當然,這隻適用於超時是由服務器引起的,而不是瀏覽器和服務器之間的連接問題。

+0

「timeout」在Tomcat連接器中沒有這樣的參數 – robsf 2014-01-15 20:21:48

+2

參數名稱是連接標籤內的connectionTimeout,如下所示: 2014-02-27 16:30:36