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>

Reply via email to