2009-04-24 18 views
1

我有一個servlet通過將HTTP Content-Type設置爲「application/zip」,將Content-Disposition設置爲「attachment」並將其寫入響應的OutputStream;它在我的本地應用程序服務器上部署時運行正常,使瀏覽器顯示彈出窗口以選擇是否要下載文件。文件下載servlet在集羣服務器上的行爲與IE不同

但是,在集羣式jboss服務器上進行部署時,IE在整個傳輸的請求文件信息的0%上掛起,然後失敗,並顯示一條錯誤消息,指出該文件不可下載:更奇怪的是,使用FF和Chrome時,servlet的行爲正確,即與本地主機上的方式相同。

任何線索?

我也可以提供servlet代碼的顯著部分的小片段:

response.setContentType("application/zip; name=" + f.getName()); 
response.setContentLength((int)f.length());  
response.addHeader("Content-Disposition", "attachment;filename=" + f.getName()); 
byte[] buf = new byte[1024]; 
int bytesRead; 
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f)); 
OutputStream os = response.getOutputStream(); 
while((bytesRead = bis.read(buf)) != -1) { 
    os.write(buf, 0, bytesRead);     
} 
os.flush(); 
bis.close(); 

我真的不知道,如果問題出在我的servlet代碼或羣集的服務器配置,但我開始猜測第二次機會可能是正確的......關於我的羣集配置中可能出現錯誤的任何想法?

+0

在羣集JBoss服務器上測試應用程序時,您是否使用SSL連接?如果是的話,那可能是解釋 - 我前一段時間有類似的問題。 – simon 2009-04-24 14:02:45

+0

否,兩臺服務器上的普通HTTP – Raibaz 2009-04-24 14:05:46

回答

1

好的,我修好了。

站在客戶端和單個集羣服務器之間的負載均衡器正在爲每個HTTP響應添加「Cache-Control:no-cache」,這導致IE變得瘋狂。

刪除標題指令解決了這個問題。

1

這可能是這些文章中描述的IE行爲的結果:

http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B181050

http://support.microsoft.com/default.aspx/kb/813827

我有一個類似的問題(僅使用Tomcat),其中僅當文件大小爲發生足夠大。通過測量從開始下載到錯誤消息的時間,您可以輕鬆測試是否屬於這種情況 - 如果時間不變,您可能會有相同的錯誤。您不可能在本地看到錯誤,因爲文件加載速度不夠快。

如果超時是由生成文件的時間產生的,則一種解決方案是以異步方式創建文件,並在準備下載文件後首先開始下載。

相關問題