Java 在ServletOutputStream中写入字节时管道断开

Java 在ServletOutputStream中写入字节时管道断开,java,servlets,jboss,Java,Servlets,Jboss,执行此代码时 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

执行此代码时

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应用程序,在JBoss4.2.3和MySQL下


这是如何造成的?我如何解决它?

通常这是由于客户端断开连接造成的。客户端断开连接可能有几个原因(超时、浏览器关闭等)。另外,按照惯例,如果没有打开流,则不要关闭。这里有更多关于关闭流的信息。

可以通过添加适当的 响应.setBufferSize(bufferSizeneeded+200); 默认缓冲区大小为8124,这可能不适用于所有用户! 及
setHeader(“内容长度”,String.valueOf(exportData.Length))

这意味着servlet的客户端出于某种原因挂断了连接。这是什么原因?例如,这是一个文件下载操作。对,可能正在下载文件的浏览器中途崩溃了。或者他们的网络连接中断了。或者不管怎样,接收器无法接受您正在写入的字节。可能是重复的,等等。BalusC,谢谢您的回复。我将尝试忽略异常,因为我无法控制它。