2009-07-10 46 views
0

我有很長的HTTP請求(生成大型Excel文件 - 約60K記錄左右),需要5分鐘完成。帶有icefaces的輪子顯示連接已經死機,雖然文件已經準備好在服務器上,但是ICEFaces頁面已經死機,我必須刷新它並且無法獲取文件!我如何如何擴展超時試圖在web.xml中有以下,但它並沒有幫助:服務器連接終止與長期請求的ICEFaces

碼 - web.xml中:

..... 
<context-param> 
     <param-name>blockingConnectionTimeout</param-name> 
     <param-value>600000</param-value> 
</context-param> 
<context-param> 
     <param-name>synchronousUpdate</param-name> 
     <param-value>false</param-value> 
</context-param> 
<context-param> 
     <param-name>connectionTimeout</param-name> 
     <param-value>600000</param-value> 
</context-param> 
<context-param> 
     <param-name>heartbeatRetries</param-name> 
     <param-value>20</param-value> 
</context-param> 
<context-param> 
     <param-name>heartbeatInterval</param-name> 
     <param-value>400000</param-value> 
</context-param> 
<context-param> 
     <param-name>heartbeatTimeout</param-name> 
     <param-value>2000000</param-value> 
</context-param> 
..... 

任何想法?

感謝,

回答

1

似乎是一個客戶端超時! 嘗試使用ajax響應創建異步。

+0

是的,它是客戶端超時。如何做異步創建?能否請你提供僞代碼 – Tam 2009-07-10 16:50:58

+0

1.創建一個ajax請求,用一個唯一的id進行excel文件處理。 2.將請求按鈕替換爲微調器圖標(或加載圖標)。如果您確定每次處理時間接近6分鐘,請添加一個倒數計時器(大約5.4分鐘...) 3.編寫一個servlet,它在文件處理成功時返回。 (id作爲參數) 4.讓開始處理的頁面每隔X秒調用一次給定ID的「check」servlet。如果結果成功,您可以提供指向顯示該文件的頁面的鏈接。 完成;)沒有更多的超時問題。 – 2009-07-11 15:50:50

0

嘗試將緩衝區大小設置爲增加值以防止客戶端/服務器之間的不必要的握手。

<context-param> 
    <param-name>facelets.BUFFER_SIZE</param-name> 
    <param-value>500000</param-value> 
</context-param> 

的web.xml

你的人誰與這個小開關大幅增加他們的JSF的性能找到了很多積極的反饋。 也許它也會對你的情況有所幫助?

0

不知道更多有關該問題的,這裏的方法我想借此:

  1. 用戶點擊鏈接生成Excel文件。顯示一些消息以代替鏈接,如「處理中...」

  2. 定期(可能每3秒)詢問服務器是否已生成文件,如果不等幾秒鐘再詢問。

  3. 文件生成完成後,將「Processing ...」文本更改爲文件「Download yourfile.xls」的鏈接,該文件已經生成並存儲在服務器的下載區中。

這樣瀏覽器沒有卡住等待生成文件。