Hi, I saw your message on tomcat-user. Several other Tomcat developers also follow that list. I personally looking at the stack trace chose to discard your message for a few reasons: - The AJP connector in the stack trace indicates Apache in front of Tomcat, making Apache and the AJP connector possible culprits. Unless you reproduce this with Tomcat standalone, I'm not convinced. - The fact it's 4.1.30, which is a mature branch that's been in the market for a while, and if what you're reporting is really true we would have heard about it via bug reports a long time ago. - Also being on a 4.x release, I'm not as interested, because only 5.x is being actively developed. If you reported this error on 5.0.27 standalone tomcat I suspect you would have gotten replies on the tomcat-user list from me and others.
Yoav Shapira Millennium Research Informatics >-----Original Message----- >From: j.random.programmer [mailto:[EMAIL PROTECTED] >Sent: Friday, July 23, 2004 3:58 PM >To: [EMAIL PROTECTED] >Subject: getReader() BUG in tomcat 4.1.30 and beyond ? > >Hi: > >I posted this in the tomcat-user but got no replies. I >thought tomcat developers read that list ? > >Anyway, here's the problem: > >Jsp's unders tomcat 4.1.30 return an empty >request.getInputStream(). > >If you _don't_ call request.getInputStream() in >your jsp but do call request.getReader(), an >invalid state exception saying that the input >stream has already been opened. Clearly, the >engine is opening the inputstream behind the >scenes and reading all it's input. That's wrong, >non-spec behavior. > >For example: > >----------- hello.jsp ------------- >hello world ><h2>POST PARAMS</h2> ><% >java.io.Reader in = request.getReader(); >int c = -1; >while ( (c = in.read()) != -1) { > out.print((char)c); > } >%> >-------------------------------------- > >If any form is posted to hello.jsp (i.e, the >action of some form is set to hello.jsp), then >when the form is posted, hello.jsp will crap out. >[if you replaced getReader() in the above code >with getInputStream, the returned input stream >will be empty]. > >This is ridiculous. Am I missing something ? > >Here's the stack trace (NOTE, I am NOT calling >getParamater or similar method, the entire >hello.jsp is shown above). I am NOT NOT NOT >opening the inputstream anywhere. > >Once again, here is the ENTIRE .jsp that the form is >posted to. > >----------- hello.jsp ------------- >hello world ><h2>POST PARAMS</h2> ><% >java.io.Reader in = request.getReader(); >int c = -1; >while ( (c = in.read()) != -1) { > out.print((char)c); > } >%> >-------------------------------------- >message Internal Server Error >description The server encountered an internal error >(Internal Server Error) that prevented it from >fulfilling this request. >exception > >org.apache.jasper.JasperException: getInputStream() >has already been called for this request > at >org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.j ava: >254) > at >org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295 ) > at >org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) > at >javax.servlet.http.HttpServlet.service(HttpServlet.java:103) > at >org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applic atio >nFilterChain.java:247) > at >org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFil terC >hain.java:193) > at >org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVal ve.j >ava:256) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:643) > at >org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 480) > at >org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at >org.apache.catalina.core.StandardContextValve.invoke(StandardContextVal ve.j >ava:191) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:643) > at >org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 480) > at >org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at >org.apache.catalina.core.StandardContext.invoke(StandardContext.java:24 22) > at >org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.jav a:18 >0) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:643) > at >org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherV alve >.java:171) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:641) > at >org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.jav a:16 >3) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:641) > at >org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 480) > at >org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at >org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve .jav >a:174) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:643) > at >org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 480) > at >org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at >org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:457) > at >org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:576) > at java.lang.Thread.run(Thread.java:552) > >root cause > >java.lang.IllegalStateException: getInputStream() has >already been called for this request > at >org.apache.catalina.connector.RequestBase.getReader(RequestBase.java:91 1) > at >org.apache.catalina.connector.RequestFacade.getReader(RequestFacade.jav a:21 >2) > at >org.apache.jsp.hello_jsp._jspService(hello_jsp.java:45) > at >org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137) > at >javax.servlet.http.HttpServlet.service(HttpServlet.java:103) > at >org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.j ava: >210) > at >org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295 ) > at >org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) > at >javax.servlet.http.HttpServlet.service(HttpServlet.java:103) > at >org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applic atio >nFilterChain.java:247) > at >org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFil terC >hain.java:193) > at >org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVal ve.j >ava:256) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:643) > at >org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 480) > at >org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at >org.apache.catalina.core.StandardContextValve.invoke(StandardContextVal ve.j >ava:191) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:643) > at >org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 480) > at >org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at >org.apache.catalina.core.StandardContext.invoke(StandardContext.java:24 22) > at >org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.jav a:18 >0) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:643) > at >org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherV alve >.java:171) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:641) > at >org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.jav a:16 >3) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:641) > at >org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 480) > at >org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at >org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve .jav >a:174) > at >org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext. invo >keNext(StandardPipeline.java:643) > at >org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java: 480) > at >org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at >org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:457) > at >org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:576) > at java.lang.Thread.run(Thread.java:552) > > >--j > > > > > > >__________________________________ >Do you Yahoo!? >New and Improved Yahoo! Mail - 100MB free storage! >http://promotions.yahoo.com/new_mail > >--------------------------------------------------------------------- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]