Java服务器做Excel导出遇到异常 50

用tomcat做Excel文件导出遇到以下异常。请问该如何解决?ClientAbortException:java.io.IOExceptionatorg.apache.... 用tomcat做Excel文件导出遇到以下异常。请问该如何解决?

ClientAbortException: java.io.IOException
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:369)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:448)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:363)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
at org.apache.jsp.cems.ssp.tasks.TaskResultDownload_jsp._jspService(org.apache.jsp.cems.ssp.tasks.TaskResultDownload_jsp:85)
... 字数过长省略
Caused by: java.io.IOException
at org.apache.coyote.http11.InternalAprOutputBuffer.flushBuffer(InternalAprOutputBuffer.java:712)
at org.apache.coyote.http11.InternalAprOutputBuffer$SocketOutputBuffer.doWrite(InternalAprOutputBuffer.java:742)
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:126)
at org.apache.coyote.http11.InternalAprOutputBuffer.doWrite(InternalAprOutputBuffer.java:552)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364)
... 33 more
展开
 我来答
hawkeyes0
2017-09-06 · TA获得超过600个赞
知道小有建树答主
回答量:484
采纳率:0%
帮助的人:141万
展开全部
这个异常产生的常见原因如下:
1、客户端因为网络原因断开连接了(例如拔网线)
2、客户端在服务器向Response的输出流写入内容前就强行中断了连接(例如在下载框出现之前就点了“停止”按钮)
3、Excel文件生成的过程太久了,客户端程序达到超时时间,主动断开了连接。
4、Nginx之类的负载均衡达到超时时间,断开了负载均衡服务器与应用服务器的连接。

建议:
只要能排除第3、4,就不是程序的问题,就没事了。
家庭作业网v
推荐于2017-09-07 · TA获得超过189个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:45万
展开全部
看样子是下载时间太长,客户端超时断开了
这种下载,建议做成异步,即:用户点击下载时返回一个流水后,后台生成文件,待生成好了前端再生成下载链接。(文件也建议放到web服务器,而不是应用服务器)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友561251d
2013-11-21 · TA获得超过185个赞
知道小有建树答主
回答量:324
采纳率:0%
帮助的人:109万
展开全部
文件读写异常 ,看看你EXECL文件读写那块。
追问

追答
你在这块加断点调试一下,很容易就会发现错误,我这儿也没有你EXECl的数据,肉眼是看不出来的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
死亡幽谷
2013-11-21 · TA获得超过248个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:136万
展开全部
网上找的,看和你的对不对

楼主。。你这个异常我也遇见过。当时好多人进行了讨论。很严肃地告诉你。这个不是java异常。。而是客户端异常。你能做的就是不要提示这个异常就好了。。
因为这是客户端行为。比如说弹出下载框的时候。但是却点了取消。。就很有可能会出现这个异常了。我说的对吧??

或者弹出下载框的时候,没有直接点击下载,而是选择了其它下载工具下载。

此问题可以忽略,或者将异常输出去除~

异常有2个
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error

这个是因为客户端取消了下载,而服务器端继续向浏览器写入数据时,抛出这个异常,这个是正常的,比如我正打开你的下载页面,中间我取消,或者换了页面。

java.lang.IllegalStateException: getOutputStream() has already been called for this response
这个异常是因为你在调用 response,getOutputStream()之前,已经有内容输出了,
一般建议这种流操作在servlet里面进行,不要使用jsp来做,如果做就不要在前面些任何东西,并且在jsp代码的第一行加上
<%
out.clearBuffer();
%>
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式