【问题标题】:Broken Pipe when writing bytes in ServletOutputStream在 ServletOutputStream 中写入字节时管道损坏
【发布时间】:2012-08-25 18:20:53
【问题描述】:

在执行这段代码时,

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)

我有一个在 JBoss 4.2.3 和 MySQL 下的 linux 服务器上运行的 Web 应用程序。

这是怎么引起的,我该如何解决?

【问题讨论】:

标签: java servlets jboss


【解决方案1】:

这通常是由于客户端断开连接。客户端可能已断开连接的原因有多种(超时、浏览器已关闭等)。此外,作为一般做法,如果您没有打开流,则不要关闭。更多关于在这里关闭流Should I close the servlet outputstream?

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-12
      • 2014-09-05
      • 1970-01-01
      • 2011-07-13
      • 2011-11-04
      • 2018-04-20
      • 2016-10-05
      • 1970-01-01
      相关资源
      最近更新 更多