Tôi đang sử dụng cầu cảng 6.1.23 trong nhật thực RAP (Nền tảng Ajax phong phú 1.3.2) và phiên bản Java 1.5. Tôi đang gửi hình ảnh PNG tới trình duyệt. Đây là những mẩu mã mà đang gây rắc rối:org.mortbay.jetty.EofException bị ném khi viết để phản hồi
phía máy chủ:
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();
phía khách hàng:
<img src="path to the servlet that is loading the image">
Điều đó là lạ là vấn đề này không xảy ra tất cả các thời gian. Nó xảy ra liên tục sau khi chúng tôi chuyển sang sản xuất. Không có vấn đề gì trong môi trường thử nghiệm của chúng tôi. Sự khác biệt duy nhất giữa sản xuất và môi trường thử nghiệm của chúng tôi là trong môi trường sản xuất, người dùng ở xa máy chủ của chúng tôi, trong khi trong môi trường thử nghiệm, chúng rất gần.
Khi ngoại lệ bị ném, hình ảnh sẽ không được hiển thị ở cuối trình duyệt của khách hàng! Chuyện gì vậy? Tôi có thể làm gì để sửa chữa nó hoặc ít nhất có cách giải quyết?
Đây là ngoại lệ dấu vết đầy đủ (tôi nhấn mạnh trường hợp ngoại lệ quan trọng):
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
Trường hợp ngoại lệ là không biết chữ. Vấn đề thực tế là 'ống bị hỏng', mà không có gì liên quan đến EOF. – EJP