Broken Pipe при записи байтов в 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, под JBoss 4.2.3 и MySQL.

Как это вызвано и как я могу решить это?

 Keith Randall31 авг. 2012 г., 00:56
Это означает, что клиент вашего сервлета по какой-то причине повесил соединение.
 gdfbarbosa31 авг. 2012 г., 01:41
Что это за причина? Это действие для загрузки файла, например.
 gdfbarbosa31 авг. 2012 г., 12:03
BalusC, спасибо за ответ. яll try ignoring the exception since I canне могу это контролировать.
 Keith Randall31 авг. 2012 г., 01:46
Правильно, возможно, браузер, который делал загрузку файла, потерпел крах на полпути. Или их интернет-соединение оборвалось. Или что угодно, получатель не может принимать байты, которые вы ему записываете.
 BalusC31 авг. 2012 г., 02:48

Ответы на вопрос(2)

Решение Вопроса

по которым клиент мог отключиться (истекло время ожидания, браузер был закрыт и т. Д.). Кроме того, как правило, если вы не открывали поток, не закрывайте его. Подробнее о закрытии потока здесьДолжен ли я закрыть выходной поток сервлета?.

response.setBufferSize (bufferSizeneeded + 200); Размер буфера по умолчанию - 8124, что может быть неприменимо для всех пользователей! а также response.setHeader (& quot; Content-Length & quot ;, String.valueOf (exportData.length));

Ваш ответ на вопрос