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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java服务器做Excel导出遇到异常相关的知识,希望对你有一定的参考价值。

用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

这个异常产生的常见原因如下:
1、客户端因为网络原因断开连接了(例如拔网线)
2、客户端在服务器向Response的输出流写入内容前就强行中断了连接(例如在下载框出现之前就点了“停止”按钮)
3、Excel文件生成的过程太久了,客户端程序达到超时时间,主动断开了连接。
4、nginx之类的负载均衡达到超时时间,断开了负载均衡服务器与应用服务器的连接。

建议:
只要能排除第3、4,就不是程序的问题,就没事了。
参考技术A 看样子是下载时间太长,客户端超时断开了
这种下载,建议做成异步,即:用户点击下载时返回一个流水后,后台生成文件,待生成好了前端再生成下载链接。(文件也建议放到web服务器,而不是应用服务器)
参考技术B 文件读写异常 ,看看你EXECL文件读写那块。追问

追答

你在这块加断点调试一下,很容易就会发现错误,我这儿也没有你EXECl的数据,肉眼是看不出来的

参考技术C 网上找的,看和你的对不对

楼主。。你这个异常我也遇见过。当时好多人进行了讨论。很严肃地告诉你。这个不是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();
%>

以上是关于Java服务器做Excel导出遇到异常的主要内容,如果未能解决你的问题,请参考以下文章

java 导出excel 关于导出路径的配置 求解答 求配置文件的例子

我也遇到了java poi合并excel单元格后 边框显示异常 ,异常部分都是合并的单元格?

java中,我在导出excel时,一直抛一个异常,请大家点进来看一下,并解决一下。

java写的excel导出时抛出的异常

java导出excel的问题, 我在本机上面测试的没有问题。在服务器上有问题

java使用poi导出excel表格,可以导出到服务器,怎么才能让客户端进行选择导出的excel的路径呢