2012-02-09 3 views
5

J'utilise jetée 6.1.23 dans l'éclipse RAP (Rich Ajax Platform 1.3.2) et Java version 1.5. J'envoie une image PNG au navigateur. Ce sont des morceaux de code qui causent des problèmes:org.mortbay.jetty.EofException est levé lors de l'écriture à la réponse

côté serveur

:

response.setContentType(application.getMimeType(".png")); 
response.setContentLength(outputSize); 
response.setHeader("Cache-Control", "no-cache"); 
response.setDateHeader("Expires", 0); 
response.setHeader("Pragma", "no-cache"); 
response.setDateHeader("Max-Age", 0); 
ServletOutputStream servletoutputstream = response.getOutputStream(); 

servletoutputstream.write(imageBytes); // this throws EofException 

servletoutputstream.flush(); 

côté client:

<img src="path to the servlet that is loading the image"> 

Ce qui est bizarre est que ce problème ne se produit pas tout le temps. Cela arrive par intermittence après que nous sommes passés à la production. Il n'y avait aucun problème dans notre environnement de test. La seule différence entre la production et notre environnement de test est que dans l'environnement de production, les utilisateurs sont loin de nos serveurs, alors que dans l'environnement de test, ils sont très proches.

Lorsque l'exception est levée, l'image ne s'affiche pas du tout à la fin du navigateur du client! Que se passe-t-il? Que puis-je faire pour le réparer ou au moins avoir une solution de contournement?

Ceci est la pleine trace d'exception (je mis en évidence des exceptions clés):

08 Feb 2012 11:49:08,955 ERROR [[email protected]] plugin.sda - 
org.mortbay.jetty.EofException 
    at org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:789) 
    at org.mortbay.jetty.AbstractGenerator$Output.flush(AbstractGenerator.java:568) 
    at org.mortbay.jetty.HttpConnection$Output.flush(HttpConnection.java:1006) 
    at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:650) 
    at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:590) 
    at com.scotiabank.ebss.common.viewer.util.ViewerUtil.sendBytes(ViewerUtil.java:533) 
    at com.scotiabank.ebss.common.viewer.servlets.ViewerServlet.doGet(ViewerServlet.java:242) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180) 
    at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) 
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:126) 
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:318) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:924) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: java.io.IOException: Broken pipe 
    at sun.nio.ch.FileDispatcher.writev0(Native Method) 
    at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:61) 
    at sun.nio.ch.IOUtil.write(IOUtil.java:192) 
    at sun.nio.ch.SocketChannelImpl.write0(SocketChannelImpl.java:393) 
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:416) 
    at java.nio.channels.SocketChannel.write(SocketChannel.java:375) 
    at org.mortbay.io.nio.ChannelEndPoint.flush(ChannelEndPoint.java:232) 
    at org.mortbay.io.nio.SelectChannelEndPoint.flush(SelectChannelEndPoint.java:211) 
    at org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:712) 
    ... 27 more 
+0

L'exception est l'analphabétisme. Le problème réel est le «tuyau cassé», qui n'a rien à voir avec EOF. – EJP

Répondre

2

Le problème semble être lié réseau, et a peu à rien à voir avec la jetée.

Vous essayez d'écrire une quantité de données sur un socket réseau qui a été fermé à l'autre extrémité. C'est ce que signifie l'exception Broken pipe.

Vous devez déterminer pourquoi la connexion HTTP se ferme de manière inattendue. Il est possible que la cause ait quelque chose à voir avec Jetty, mais je ne le soupçonne pas.

1

Vérifiez les limites de taille de demande/réponse. Essayez de télécharger une plus petite image < 4k.

Questions connexes