You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Kitching Simon <Si...@orange.ch> on 2000/11/14 17:54:32 UTC

RE: Please Look - 3.2 beta 7 problem - RequestDispatcher inclu de()


> -----Original Message-----
> From:	Wyn Easton [SMTP:wyn_easton@yahoo.com]
> Sent:	Tuesday, November 14, 2000 2:47 PM
> To:	tomcat-user@jakarta.apache.org
> Subject:	RE: Please Look -  3.2 beta 7 problem -  RequestDispatcher
> inclu de()
> 
> Fair enough.
> I did notice the addition of:
> 
>   // NOTE:  This *must* be done before the include flag is set for
> 	// this request!
> 	response.flushBuffer();
> 
> in RequestDispatcherImpl.java.  That is probably the change that made
> my include - forward stop working.
>  
> I guess it is OK by the spec. to do multiple include() method calls?
	[Kitching Simon]  
	Yes, no problem with this as far as I know. 

	Cheers,

	Simon

> Thanks.
> 
> --- Kitching Simon <Si...@orange.ch> wrote:
> > 
> > 
> > > -----Original Message-----
> > > From:	Wyn Easton [SMTP:wyn_easton@yahoo.com]
> > > Sent:	Tuesday, November 14, 2000 12:24 PM
> > > To:	tomcat-user@jakarta.apache.org
> > > Subject:	Please Look -  3.2 beta 7 problem -  RequestDispatcher
> > > include()
> > > 
> > > Are you not suppose to mix URL access with a RequestDispatcher?
> > > Thanks.
> > > 
> > > Also, in 3.2 beta 6 I could do an include() then a forward().
> > > Now in 3.2 beta 7 I get an illegalState error on the forward()
> > > because of an open outputstream.  I'm not opening an output stream.
> > > The include() must be doing it. 
> > > 
> > 	[Kitching Simon] 
> > 	I don't think that it is valid to do include then forward, ie
> > 	if it was possible before, then *that* was the bug, not
> > 	the current behaviour.
> > 
> > 	To quote from the servlet docs:
> > 
> > 	forward should be called before the response has been committed
> > 	to the client (before response body output has been flushed).
> > 	If the response already has been committed, this method throws
> > 	an IllegalStateException.
> > 
> > 	Now I can't find the reference for the moment, but I'm sure that in
> > the 
> > 	specs somewhere it says that the buffer is *always* flushed before
> > 	an include operation.
> > 
> > 	Therefore it is not possible, *by definition* to do an include then
> > 	a forward.
> > >  
> > > --- Wyn Easton <wy...@yahoo.com> wrote:
> > > > I'm having this problem on 3.2 beta 7
> > > > 
> > > > The exact text of the  exception is:
> > > > 
> > > > java.lang.IllegalArgumentException: Short Read
> > > > 
> > > > This Exception is being generated in HttpUtils.java in the
> > > > parsePostData() method.
> > > > 
> > > > Here is what is happening:
> > > > 
> > > > I'm opening a HttpURLConnection to servlet_A that has been set to
> > use
> > > > the POST method by calling setRequestMethod("POST") for the
> > > > HttpURLConnection. In servlet_A I get a ServletInputStream and
> > > > read from the HttpURLConnection.
> > > > I then get an ServletOutputStream from the response.
> > > > I then get a RequestDispatcher for servlet_B.
> > > > When I call the include() method I get the exception mentioned
> > > > because parsePostData() in HttpUtils tries to read "len" number
> > > > of bytes from the ServletInputStream "in" and there is nothing
> > > > to read. I changed parsePostData() in HttpUtils to return an
> > > > empty Hashtable for this case and it worked fine. 
> > > > (Maybe this is how this should work since nothing read means no
> > > > parameters in the POST data. Even if the len is greater than 0.)
> > > > 
> > > > However, if I try to use the ServletOutputStream after returning
> > > > to servlet_A from servlet_B nothing is written to the original
> > > > HttpURLConnection.  I don't know if the ServletOutputStream is
> > > > being closed when I return from the include(). I don't get an
> > > > Exception when writing to the ServletOutputStream. I just don't
> > > > get any data at the listening end of the HttpURLConnection.
> > > > 
> > > > I'm going to modify my code to use the include() instead of
> > > > the HttpURLConnection, but shouldn't it work either way?
> > > > 
> > > > Thanks.
> > > > 
> > > > 
> > > > =====
> > > > Wyn Easton
> > > > wyn_easton@yahoo.com
> 
> 
> =====
> Wyn Easton
> wyn_easton@yahoo.com
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Calendar - Get organized for the holidays!
> http://calendar.yahoo.com/