tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kitching Simon <Simon.Kitch...@orange.ch>
Subject RE: Please Look - 3.2 beta 7 problem - RequestDispatcher inclu de()
Date Tue, 14 Nov 2000 12:21:34 GMT


> -----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 <wyn_easton@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
> > 
> > __________________________________________________
> > Do You Yahoo!?
> > Yahoo! Calendar - Get organized for the holidays!
> > http://calendar.yahoo.com/
> 
> 
> =====
> Wyn Easton
> wyn_easton@yahoo.com
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Calendar - Get organized for the holidays!
> http://calendar.yahoo.com/

Mime
View raw message