JSPwriterImpl generates IO exception while processing jsp:include that gets forwarded.
Hello, This is my second attempt to get anyone's opinion if what's happening is a defect or it can be prevented somehow. I hope it generates more replies. In my webapp application I have servlet filter that handles error handling for runtime exceptions; when such exception happens, it forwards request to error page where user-frienldy error is presented. It works fine for most of the cases, however, if runtime exception happens during processing of jsp:include/ directive, I am getting various exceptions in the log (depending on the location of jsp:include/ with respect to other tags.) These exceptions do not appear to cause any harm, however I was curious why are they happening in the first place. Is it illegal to forward request while processing include? This is 6.x version of tomcat. Exception might look like this: java.io.IOException: Stream closed org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204) Or like this: Caused by: java.io.IOException: Stream closed at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204) at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115) at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:188) ... 45 more Caused by: java.io.IOException: Stream closed at org.apache.jasper.runtime.BodyContentImpl.ensureOpen(BodyContentImpl.java:582) at org.apache.jasper.runtime.BodyContentImpl.write(BodyContentImpl.java:142) at org.apache.jasper.runtime.BodyContentImpl.write(BodyContentImpl.java:159) at org.apache.jsp.WEB_002dINF.jsp.projects_002dtab_002dcontainer_jsp._jspx_meth_stripes_005flayout_002dcomponent_005f1(projects_002dtab_002dcontainer_jsp.java:484) at org.apache.jsp.WEB_002dINF.jsp.projects_002dtab_002dcontainer_jsp._jspx_meth_stripes_005flayout_002drender_005f0(projects_002dtab_002dcontainer_jsp.java:138) at org.apache - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
RE: JSPwriterImpl generates IO exception while processing jsp:includethat gets forwarded.
I have servlet filter that is invoked ahead of any application code that catches all unhandled exceptions, and then it forwards request to appropriate page depending on the exception. I am indeed doing requestDispatcher.forward() and I set attributes on the request that are later used in custom error jsp for presentation. It seems to work fine for all the cases so far except with jsp:include someservlet/ where someservlet generates runtime exception. (the browser does get the right error page, but exceptions are logged from tomcat). I will experiment with using response.sendError() although it's not clear how to pass information back to the page (it appears I can only send a message) , such as stack trace, timestsamp of error, etc. I guess I can cramp it into message and parse it back in the page, but It does not feel right. I also think that I might be in danger of getting IllegalStateException since it's possible that some info can be already written back to the client. Lets say, I have multiple jsp:include servlet1/, jsp:include servlet2/, and second include generated runtime exception - I suspect this might resolve in IllegalStateException during sendError() although i haven't tested it yet. Thank you for your responses; -Original Message- From: Caldarale, Charles R [mailto:chuck.caldar...@unisys.com] Sent: Saturday, July 25, 2009 6:48 PM To: Tomcat Users List Subject: RE: JSPwriterImpl generates IO exception while processing jsp:includethat gets forwarded. From: Leonard Gestrin [mailto:leonard.gest...@markettools.com] Subject: JSPwriterImpl generates IO exception while processing jsp:includethat gets forwarded. Is it illegal to forward request while processing include? No, but it's illegal to forward a request after the response has been committed. Are you actually doing a RequestDispatcher.forward() call, or are you using HttpServletRequest.sendError()? The latter is the proper way to trigger the error page. - Chuck THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY MATERIAL and is thus for use only by the intended recipient. If you received this in error, please contact the sender and delete the e-mail and its attachments from all computers. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
RE: JSPwriterImpl generates IO exception while processing jsp:include that gets forwarded.
Hi Martin, The filter is just a pass through to application code - it only gets to work if there is runtime exception coming back from processing request. ErrorHandlerFilter is mapped to REQUEST, FORWARD, INCLUDE It has Try{ filterChain.doFilter(request, response); } catch (throwable th){ /// ..process th. (setting some attributes in requests for presentation in errorPage.jsp request.getRequestDispatcher(errorPage.jsp).forward( request, response); } Example execution path where the issue happens is the following Browser- servletX-forward to result.sp; on result.jsp there is jsp:include someServlet/ and someServlet throws runtime. I hope it makes sense :) Thanks -Original Message- From: Martin Gainty [mailto:mgai...@hotmail.com] Sent: Saturday, July 25, 2009 6:46 PM To: Tomcat Users List Subject: RE: JSPwriterImpl generates IO exception while processing jsp:include that gets forwarded. dont understand why you want to forward before jsp:include has been processed? could you explain a bit about webapp architecture or workflow you wish to implement? Martin Gainty __ Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen. Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni. From: leonard.gest...@markettools.com To: users@tomcat.apache.org Date: Sat, 25 Jul 2009 15:08:51 -0700 Subject: JSPwriterImpl generates IO exception while processing jsp:include that gets forwarded. Hello, This is my second attempt to get anyone's opinion if what's happening is a defect or it can be prevented somehow. I hope it generates more replies. In my webapp application I have servlet filter that handles error handling for runtime exceptions; when such exception happens, it forwards request to error page where user-frienldy error is presented. It works fine for most of the cases, however, if runtime exception happens during processing of jsp:include/ directive, I am getting various exceptions in the log (depending on the location of jsp:include/ with respect to other tags.) These exceptions do not appear to cause any harm, however I was curious why are they happening in the first place. Is it illegal to forward request while processing include? This is 6.x version of tomcat. Exception might look like this: java.io.IOException: Stream closed org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204) Or like this: Caused by: java.io.IOException: Stream closed at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204) at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115) at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:188) ... 45 more Caused by: java.io.IOException: Stream closed at org.apache.jasper.runtime.BodyContentImpl.ensureOpen(BodyContentImpl.java:582) at org.apache.jasper.runtime.BodyContentImpl.write(BodyContentImpl.java:142) at org.apache.jasper.runtime.BodyContentImpl.write(BodyContentImpl.java:159) at org.apache.jsp.WEB_002dINF.jsp.projects_002dtab_002dcontainer_jsp._jspx_meth_stripes_005flayout_002dcomponent_005f1(projects_002dtab_002dcontainer_jsp.java:484) at org.apache.jsp.WEB_002dINF.jsp.projects_002dtab_002dcontainer_jsp._jspx_meth_stripes_005flayout_002drender_005f0(projects_002dtab_002dcontainer_jsp.java:138) at org.apache - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org _ BingT brings you maps, menus, and reviews organized in one place. Try it now. http://www.bing.com/search?q=restaurantsform=MLOGENpubl=WLHMTAGcrea=TXT_MLOGEN_Local_Local_Restaurants_1x1
java.io.IOException: Stream closed org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204) on forward while processing jsp:include
Hello, In my application I have servlet filter that handles error handling for runtime exceptions; when such exception happens, it forwards request to error page where user-frienldy error is presented. It works fine for most of the cases, however, if runtime exception happens during processing of jsp:include/ directive, I am getting various exceptions in the log (depending on the location of jsp:include/ with respect to other tags.) These exceptions do not appear to cause any harm, however I was curious why are they happening in the first place. Is it illegal to forward request while processing include? This is 6.x version of tomcat. Caused by: java.io.IOException: Stream closed at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204) at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115) at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:188) ... 45 more Caused by: java.io.IOException: Stream closed at org.apache.jasper.runtime.BodyContentImpl.ensureOpen(BodyContentImpl.java:582) at org.apache.jasper.runtime.BodyContentImpl.write(BodyContentImpl.java:142) at org.apache.jasper.runtime.BodyContentImpl.write(BodyContentImpl.java:159) at org.apache.jsp.WEB_002dINF.jsp.projects_002dtab_002dcontainer_jsp._jspx_meth_stripes_005flayout_002dcomponent_005f1(projects_002dtab_002dcontainer_jsp.java:484) at org.apache.jsp.WEB_002dINF.jsp.projects_002dtab_002dcontainer_jsp._jspx_meth_stripes_005flayout_002drender_005f0(projects_002dtab_002dcontainer_jsp.java:138) at org.apache - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
solution RE: request.getSession() generates IllegalStateException in top filter(appears, response not being recycled properly if SocketException happenedfor it in the past)
I found a solution that seems to hold. Instead of associating ImageWriter directly with response.outputstream, I create temporary ByteInputStream that is associated with javax.imageio.ImageWriter Once imagewriter is done, I am dumping ByteInputStream bytes to response.outputsream. My theory is that ImageWriter was hanging to outputstream longer than it supposed to And that was causing issues in ClientAbortException cases. Thanks -Original Message- From: Caldarale, Charles R [mailto:chuck.caldar...@unisys.com] Sent: Thursday, April 16, 2009 9:45 AM To: Tomcat Users List Subject: RE: request.getSession() generates IllegalStateException in top filter(appears, response not being recycled properly if SocketException happenedfor it in the past) From: Leonard Gestrin [mailto:leonard.gest...@markettools.com] Subject: request.getSession() generates IllegalStateException in top filter(appears, response not being recycled properly if SocketException happenedfor it in the past) After a while, the same response object is being used by tomcat again, but as it gets to a first filter, I can see that it's already in commited state (response.isCommitted()==true) It's not completely clear from your description whether the filter is part of the request that encountered the socket error or a different request. If the former, the behavior you observe is expected; if the latter, you may be running into this bug, fixed over a year ago: https://issues.apache.org/bugzilla/show_bug.cgi?id=30949 This is tomcat apache-tomcat-5.5.20, JRE 15, WinXP. What happens if you try it on a version that's not over 2.5 years old? - Chuck THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY MATERIAL and is thus for use only by the intended recipient. If you received this in error, please contact the sender and delete the e-mail and its attachments from all computers. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
RE: request.getSession() generates IllegalStateException in top filter(appears, response not being recycled properly if SocketException happenedfor it in the past)
Hi Chuck, I downloaded tomcat 6.0.18 and the problem still happens. The filter is not on the path to servlet that generates image; The problem with response being already committed happens in various places (in filter and in graph servlet itself on the subsequent calls). I can see that only tomcat's code in on the stack when it happens. Thanks -Original Message- From: Caldarale, Charles R [mailto:chuck.caldar...@unisys.com] Sent: Thursday, April 16, 2009 9:45 AM To: Tomcat Users List Subject: RE: request.getSession() generates IllegalStateException in top filter(appears, response not being recycled properly if SocketException happenedfor it in the past) From: Leonard Gestrin [mailto:leonard.gest...@markettools.com] Subject: request.getSession() generates IllegalStateException in top filter(appears, response not being recycled properly if SocketException happenedfor it in the past) After a while, the same response object is being used by tomcat again, but as it gets to a first filter, I can see that it's already in commited state (response.isCommitted()==true) It's not completely clear from your description whether the filter is part of the request that encountered the socket error or a different request. If the former, the behavior you observe is expected; if the latter, you may be running into this bug, fixed over a year ago: https://issues.apache.org/bugzilla/show_bug.cgi?id=30949 This is tomcat apache-tomcat-5.5.20, JRE 15, WinXP. What happens if you try it on a version that's not over 2.5 years old? - Chuck THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY MATERIAL and is thus for use only by the intended recipient. If you received this in error, please contact the sender and delete the e-mail and its attachments from all computers. - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
request.getSession() generates IllegalStateException in top filter (appears, response not being recycled properly if SocketException happened for it in the past)
Hello, This is my first post on the list and I've been using tomcat for few years, so I want to start off stating that it is an excellent product. However, I've ran into an issue, which I am not sure what to do about. We have jsp that displays multiple images, which is being written directly to the page by the servlet. img src=/chart/DrawTestChart Every once in while, in the servlet, while writing the bytes out, I get ClientAbortException: java.net.SocketException: Connection reset by peer At this point, I catch an exception and in finally block, I am trying to close response.outputstream. After a while, the same response object is being used by tomcat again, but as it gets to a first filter, I can see that it's already in commited state (response.isCommitted()==true) I know it's the same response object for which SocketException was generated, because I am printing response.hashcode() in chart servlet and in Filter This really sucks, because anything I try to do with such response is doomed to fail :) So, please advise how can I work around this issue, short of writing image in temp directory of tomcat as oppose to directly to response output stream. This is tomcat apache-tomcat-5.5.20, JRE 15, WinXP. I can provide code snippets, if it would be helpful. (chart servlet is using jdk classes java.awt.image.BufferedImage to create image javax.imageio.ImageWriter that is wrapped on top of response.outputstream) Thanks Leonard - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org