一.场景
页面上提供下载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之后:进行下载操作,结果一切正常,问题解决:
查看后台没有报错信息。问题解决。