"Dahl" skrev d. 03-10-02 13:55 dette indlæg :
> Hej
>
> Jeg arbejder på et project som benytter Tomcat som webserver
>
> Jeg har lavet en simple servlet som kan streame et jpg billede til en
> browser. Den relevante del af koden er listed her:
>
> ---- CODE START ----
>
> res.setContentType("image/jpg");
> FileInputStream image_file = new FileInputStream(image_path);
> JPEGImageDecoder image_decoder =
> JPEGCodec.createJPEGDecoder(image_file);
> BufferedImage buffered_image =
image_decoder.decodeAsBufferedImage();
> image_file.close();
>
> JPEGImageEncoder image_encoder =
> JPEGCodec.createJPEGEncoder(servletOutputStream);
> image_encoder.encode(buffered_image);
> servletOutputStream.flush();
>
> ---- CODE END ----
>
> Når jeg loader en webside med et IMG tag der refererer til servlet'en
bliver
> billedet loaded som gforventet. Så servlet'en fungere.
>
> Problemerne begynder hvis jeg refresh'er browseren får billedet er
loaded
> færdigt. Jeg går ud fra at det der sker er at browseren terminere
> forbindelsen til servlet'en. Det bevirker at denn exception bliver
genereret
> af servletten:
>
> ----- EXCEPTION START -----
>
> java.net.SocketException: Connection reset by peer: socket write error
> at java.net.SocketOutputStream.socketWrite(Native Method)
> at
java.net.SocketOutputStream.write(SocketOutputStream.java:83)
> at
>
org.apache.tomcat.service.http.HttpResponseAdapter.endHeaders(HttpRespon
seAd
> apter.java:124)
> at
>
org.apache.tomcat.core.BufferedServletOutputStream.sendHeaders(BufferedS
ervl
> etOutputStream.java:126)
> at
>
org.apache.tomcat.core.BufferedServletOutputStream.reallyFlush(BufferedS
ervl
> etOutputStream.java:236)
> at
>
org.apache.tomcat.core.BufferedServletOutputStream.write(BufferedServlet
Outp
> utStream.java:185)
> at
> sun.awt.image.codec.JPEGImageEncoderImpl.writeJPEGStream(Native
Method)
> at
>
sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.jav
a:47
> 5)
> at
>
sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.jav
a:23
> 1)
> at
>
com.dahl.ovds.webserver.servlets.EvidenceLoader.submit(EvidenceLoader.ja
va:8
> 8)
> at
> com.dahl.common.servlets.HttpSubmit.doGet(HttpSubmit.java:123)
> at
javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
>
org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
> at
org.apache.tomcat.core.Handler.service(Handler.java:286)
> at
> org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
> at
>
org.apache.tomcat.core.ContextManager.internalService(ContextManager.jav
a:79
> 7)
> at
> org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
> at
>
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(H
ttpC
> onnectionHandler.java:210)
> at
>
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416
)
> at
>
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:49
8)
> at java.lang.Thread.run(Thread.java:484)
> java.io.IOException: reading encoded JPEG Stream
> at
> sun.awt.image.codec.JPEGImageEncoderImpl.writeJPEGStream(Native
Method)
> at
>
sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.jav
a:47
> 5)
> at
>
sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.jav
a:23
> 1)
> at
>
com.dahl.ovds.webserver.servlets.EvidenceLoader.submit(EvidenceLoader.ja
va:8
> 8)
> at
> com.dahl.common.servlets.HttpSubmit.doGet(HttpSubmit.java:123)
> at
javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
>
org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
> at
org.apache.tomcat.core.Handler.service(Handler.java:286)
> at
> org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
> at
>
org.apache.tomcat.core.ContextManager.internalService(ContextManager.jav
a:79
> 7)
> at
> org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
> at
>
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(H
ttpC
> onnectionHandler.java:210)
> at
>
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416
)
> at
>
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:49
8)
> at java.lang.Thread.run(Thread.java:484)
>
> ----- EXCEPTION END -----
>
> Linien "EvidenceLoader.java:88" i exception'en er linien
> "image_encoder.encode(buffered_image)" i servlet'en
>
> Hvis jeg bliver ved med at fremprovokere exception'en går webservere
> pludselig ned. Jeg får Windows fejl beskeden: "The application
> javaw.exe has generated a critical error and will be shut down.."
>
> Jeg har prøvet at fange exception'en i min servlet med webservren går
stadig
> ned.
>
> Hvad er det der sker? Er det fordi Tiomcat ikke kan håndtere
> java.net.SocketException når den streamer binære data? Hvad kan jeg
gøre for
> at forhindre at webseveren går ned?
>
> Jeg er fuldstænding på bar bund så atl hjælp er velkommen.
>
> På forhånd tak
> Dahl
>
>
>
Jeg har løst problemet ved at lave return; eller flush.
/Johnny
--
Leveret af:
http://www.kandu.dk/
"Vejen til en hurtig løsning"