13

このコードを実行している間、

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 アプリを実行しています。

これはどのように発生し、どうすれば解決できますか?

4

2 に答える 2

10

通常、これはクライアントの切断が原因です。クライアントが切断された理由はいくつかあります (タイムアウト、ブラウザーが閉じられたなど)。また、一般的な慣行として、ストリームを開いていない場合は閉じないでください。ストリームを閉じる方法の詳細はこちらサーブレットの出力ストリームを閉じる必要がありますか? .

于 2012-08-30T23:04:16.847 に答える
2

これは、適切な response.setBufferSize(bufferSizeneeded+200); を追加することで改善できます。デフォルトのバッファ サイズは 8124 ですが、これはすべてのユーザーに適用できるわけではありません。および response.setHeader("Content-Length", String.valueOf(exportData.length));

于 2015-09-04T13:22:07.407 に答える