执行此代码时,
ServletOutputStream out = response.getOutputStream();
out.write(bytes, 0, bytes.length);
out.flush();
out.close();
我经常收到此异常,我无法弄清楚为什么会这样。
Caused by: ClientAbortException: java.net.SocketException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:354)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
我有一个在Linux服务器上运行的Web应用程序,在JBoss 4.2.3和MySQL下。
这是如何引起的?如何解决?
答案 0 :(得分:9)
通常这是由于客户端断开连接。客户端可能已断开连接的原因有多种(超时,浏览器已关闭等)。此外,作为一般惯例,如果您没有打开流,则不要关闭。有关在此处关闭流的更多信息Should I close the servlet outputstream?。
答案 1 :(得分:2)
这可以通过添加适当的改进 response.setBufferSize(bufferSizeneeded + 200); 默认缓冲区大小为8124,可能不适用于所有用户! 和 response.setHeader(" Content-Length",String.valueOf(exportData.length));