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.java: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(ApplicationFilterChain.java:247)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(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(StandardContextValve.java:191)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(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:2422)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(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.java:174)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(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:911)
        at
org.apache.catalina.connector.RequestFacade.getReader(RequestFacade.java:212)
        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.java: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(ApplicationFilterChain.java:247)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(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(StandardContextValve.java:191)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(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:2422)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(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.java:174)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(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]

Reply via email to