Remy Maucherat wrote:
Costin Manolache wrote:> I'm getting closer - Remy or Kin-Man, I need your help. > As I expected, the flush() was hiding some other behaviors. > > Right now I'm looking at ApplicationDispatcher.doForward(). > > What happens is: > - error happens > - we forward to the error page > - error page executes, put the data in the out buffer > - BEFORE: the out buffer was commited > - now we just return from servlet to doForward() > - The "commiting and closing response" reached ( line 471 ) > What happens here is response is a ResponseFacade, and finish > is called. But the real flushing and closing doesn't actually > happens. > > I changed the code to first flush/close, the call finish - and > it now seems to work fine. > > But I'm not sure what else may be affected by this - or if > it's safe to make the change ( well, for 5.0 it may be, but what > about 4.1 ? ) > > In any case, I expect this to have caused some weird behavior > for normal forward - since forward doesn't seem to really flush/close > as it was supposed to do ( unless response is not facade - does > this case ever happen ? ). A bit strange no other test detected that, > normal servlets don't have flush/close that the jsp page had. No, that wouldn't work. forward does a fake flush/close, because some further error page processing may occur (based on the status code, for example). I think we'll have to do the commit in the JSP error page itself (and call close right away in the case, rather than flush). I hope it's doable.
Given the risk of this refactoring, I propose delaying it in 4.1.x until at least after the next stable release.
Remy
--
To unsubscribe, e-mail: <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>