Broken Pipe when writing bytes in ServletOutputStr

2020-02-05 12:26发布

While executing this code,

ServletOutputStream out = response.getOutputStream();
out.write(bytes, 0, bytes.length);
out.flush();  
out.close();  

I'm getting this exception frequently and I can't figure out why it's happening.

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)

I have a web app running in a linux server, under JBoss 4.2.3 and MySQL.

How is this caused and how can I solve it?

2条回答
爱情/是我丢掉的垃圾
2楼-- · 2020-02-05 12:56

This can be improved by adding proper response.setBufferSize(bufferSizeneeded+200); The default buffer size is 8124 , Which may not be applicable for all the users ! and response.setHeader("Content-Length", String.valueOf(exportData.length));

查看更多
▲ chillily
3楼-- · 2020-02-05 13:00

Typically this is due to the client disconnecting. There are several reasons the client may have disconnected (timed out, browser was closed, etc). Also, as general practice, if you didn't open the stream then don't close. More on closing the stream here Should I close the servlet outputstream?.

查看更多
登录 后发表回答