在ServletOutputStream中写入字节时断管

执行此代码时,

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下运行。

这是怎么造成的,如何解决?

通常这是由于客户端断开连接。 客户端可能已断开连接的原因有多种(超时,浏览器已关闭等)。 此外,作为一般惯例,如果您没有打开流,则不要关闭。 关于关闭流的更多信息我应该关闭servlet输出流吗? 。

这可以通过添加适当的response.setBufferSize(bufferSizeneeded + 200)来改进; 默认缓冲区大小为8124,可能不适用于所有用户! 和response.setHeader(“Content-Length”,String.valueOf(exportData.length));