2012-02-09 113 views
5

我在eclipse RAP(Rich Ajax Platform 1.3.2)和Java版本1.5中使用jetty 6.1.23。我正在向瀏覽器發送PNG圖像。這是一段代碼,這是造成麻煩:org.mortbay.jetty.EofException在寫入響應時被拋出

服務器端:

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(); 

客戶端:

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

這是奇怪的是,這個問題不會發生所有的時間的事情。它在我們轉移到生產後間歇性地發生。我們的測試環境沒有問題。生產和我們測試環境的唯一區別在於,在生產環境中,用戶遠離我們的服務器,而在測試環境中,它們非常接近。

當拋出異常時,圖像在客戶端的瀏覽器端根本不顯示!到底是怎麼回事?我能做些什麼來解決這個問題,或者至少有一個解決方法?

這是完整的異常跟蹤(我的高亮按鍵例外):

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

例外是文盲。實際的問題是'破管',它與EOF沒有任何關係。 – EJP 2016-07-27 10:05:58

回答

2

的問題似乎是與網絡相關,並有小到無關的碼頭。

您正在嘗試將大量數據寫入到另一端已關閉的網絡套接字。這就是異常的意思。

您需要弄清爲什麼HTTP連接意外關閉。原因可能與Jetty有關,但我強烈懷疑不是。

1

檢查請求/響應大小限制。嘗試下載較小的圖像< 4k。

相關問題