Lors de l'exécution de ce code,
ServletOutputStream out = response.getOutputStream();
out.write(bytes, 0, bytes.length);
out.flush();
out.close();
Je reçois fréquemment cette exception et je ne comprends pas pourquoi cela se produit.
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)
J'ai une application web fonctionnant sur un serveur linux, sous JBoss 4.2.3 et MySQL.
Comment cela est-il causé et comment puis-je le résoudre?
Cela est généralement dû à la déconnexion du client. Il y a plusieurs raisons pour lesquelles le client peut s'être déconnecté (expiration du délai, le navigateur a été fermé, etc.). De plus, en règle générale, si vous n'avez pas ouvert le flux, ne le fermez pas. Plus d'informations sur la fermeture du flux ici Dois-je fermer le flux de sortie du servlet? .
Cela peut être amélioré en ajoutant response.setBufferSize (bufferSizeneeded + 200); La taille de tampon par défaut est 8124, ce qui peut ne pas s'appliquer à tous les utilisateurs! et response.setHeader ("Content-Length", String.valueOf (exportData.length));