This is an excellent finding. I got the same IllegalStateExceptions as well when jsp:include a struts1 action with resin 3.1.4.
I tested with struts 1.0.x, 1.1.x, and 1.2.x, I got the same error. However, when I tried struts 1.3.8, this exception disappeared. I posted the similar question on the list several weeks ago, and I was suggested to use the switch flush="false", which actually did not make any difference. If anyone knows the solution for avoiding this exception with struts versions less than 1.3.x, please let me know. Thanks. Ilya Kasnacheev wrote: > I've found one thing in resin 3.1 regarding RequestDispatcher, include() and > forward() > > Let's suppose we have a ServletResponse, and we've wrote some text into its > output stream, so it's now in "committed" state. > That means, as J2EE spec tells, that we can no longer do forward() on it, or > we'll get an IllegalStateException. In the meantime we can do include() on > it, including the response from random URI into result document. > > So we include() a chain of struts1 actions into it. > They're going to forward() the request until the end of chain is reached. > As I've found out, this will result in a shower of IllegalStateExceptions > being thrown. Interesting thing that, despite those exceptions, actions > successfully transfer control from one to another, eventually finishing > processing and writing everything they need to. > > Now the weird thing is: > > On the first side, include()d document can be thought as being processed > independently. Basically it should behave as if you fetched that page by > using HTTP and then printed it into output stream. So, forward() should work > because there is no reason for it to not work - because it would work in the > case of outside request. > On the second side, include()d document gets unmodified ServletResponse from > parent servlet, which have its buffer committed, and I guess there are no > easy ways to tell whenever forward() was called from include()d servlet, > where it is fine, or from the parent servlet, where it's a no-no > > I can't say I have a question about resin, I just wanted to share that bunch > of facts and thoughts with you. > > P.S. Having said that, I find the original limitation on forward() rather > annoying. I guess it's supposed to ensure cookies and headers neither being > written into document nor discarded, and also prevent from outputting half of > one html document and then outputting the whole another html document. > > That's the well known "We didn't want to let you shoot yourself in the foot > so > we duct taped your fingers together; and also, we wanted to prematurely > optimise a bit" antipattern clearly. > > > _______________________________________________ > resin-interest mailing list > [email protected] > http://maillist.caucho.com/mailman/listinfo/resin-interest > _______________________________________________ resin-interest mailing list [email protected] http://maillist.caucho.com/mailman/listinfo/resin-interest
