2012-02-09 26 views
5

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 
+0

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

Trả lời

2

Vấn đề dường như có liên quan đến mạng, và có rất ít-to-không có gì để làm với Jetty.

Bạn đang cố ghi một lượng dữ liệu vào ổ cắm mạng đã được đóng ở đầu kia. Đó là ý nghĩa của ngoại lệ Broken pipe.

Bạn cần tìm hiểu lý do kết nối HTTP bị đóng đột ngột. Có thể là nguyên nhân có liên quan đến Jetty, nhưng tôi thực sự không ngờ.

1

Kiểm tra yêu cầu/giới hạn kích thước phản hồi. Thử tải xuống ảnh nhỏ hơn < 4k.

Các vấn đề liên quan