一.場景
頁面上提供下載Excel文件的功能,用於下載報表中的數據。
分別在chrome,IE中進行測試。在chrome中正常,在IE中后台報錯。
二.錯誤信息
org.apache.catalina.connector.ClientAbortException: java.io.IOException
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:407)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:371)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:432)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:420)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91)
at jxl.write.biff.CompoundFile.writeExcelData(CompoundFile.java:249)
at jxl.write.biff.CompoundFile.write(CompoundFile.java:233)
at jxl.write.biff.File.close(File.java:95)
at jxl.write.biff.WritableWorkbookImpl.close(WritableWorkbookImpl.java:352)
Caused by: java.io.IOException
at org.apache.coyote.http11.InternalAprOutputBuffer.flushBuffer(InternalAprOutputBuffer.java:205)
at org.apache.coyote.http11.InternalAprOutputBuffer.access$100(InternalAprOutputBuffer.java:37)
at org.apache.coyote.http11.InternalAprOutputBuffer$SocketOutputBuffer.doWrite(InternalAprOutputBuffer.java:235)
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:119)
三.解決方案
<一>錯誤分析
1.從網上查找,ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error的原因是由於處理http連接時,正在輸出內容時,用戶關閉了IE,會出現一個"ClientAbortException",屬於I/O處理中出現的一個異常,應用服務器應該會捕捉。
2. 客戶端造成的,沒有辦法控制,而且后台會記錄這個異常。
3.我發下並沒有在輸入的時候關閉瀏覽器的操作,不過可以確定一點是IE瀏覽器連接之后,強制關閉造成的IO異常,導致客戶端請求中斷;
<二>問題根源
操作中發現,IE這個時候下載的動作不是瀏覽器自身的下載器進行的,而是迅雷插件執行的下載動作。如圖,

因此,我就想會不會是迅雷的組件阻斷了IE下載器的請求,導致后台報錯。
於是,我想辦法恢復IE默認的下載器的功能。過程如下,
(1)Internet選項,打開 ”管理下載項“:
(2)在工具和擴展中找到了,迅雷下載支持,並且是啟用的,然后禁用它:
(3)重啟 IE之后:進行下載操作,結果一切正常,問題解決:


查看后台沒有報錯信息。問題解決。
