Indirect jsp:include does not seem to work
Hello all, I have master jsp page, and I try to jsp:include page=/strutsAction.do, which forwards to detail jsp page, but this does not work. On Tomcat 4.x and 5.x the detail page content is included, but further content from the master page is stripped out. According to jsp specs, if I include a resource with jsp:include, its content should be included in the page. Afaik the spec does not specify nesting level. I looked in the code. ApplicationDispatcher correctly identifies the first request to strutsAction.do as Path Based Include. But when struts action forwards to detail jsp, ApplicationDispatcher identifies it as Path Based Forward. doForward() is called instead of doInclude(), and ApplicationDispatcher flushes and closes the response writer. Thus, Jasper cannot write the rest of master page content to writer, and throws org.apache.jasper.JasperException: Stream closed. Without thinking much, I commented out writer flushing in ApplicationDispatcher.doForward(). It seems to work on Tomcat 4.1.31, but failed on Tomcat 5.0. Anyway, I am not sure that I did a right thing and that all buffers are properly being closed now. Would be great if Tomcat devs look into it. Btw, Jetty does not work as I want, too. BUT: I tried to create a proxy JSP page, which is included in main JSP page. This proxy page includes strutsAction.do, which forwards to real JSP page that I want to include (whew!) Jetty works perfectly fine with this proxy JSP page! Also, Resin works fine both with direct including of struts action from main page, and with proxy JSP page. So, I believe that this is a Tomcat bug. Thanks, Michael Jouravlev. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Indirect jsp:include does not work
I found bug #21440 in ASF bug database which looks awful like the one I have. It was entered in July, 2003 and is still not resolved. Tomcat devs considered against attempting to fix this bug (if confirmed it is actually one) in 4.1.x. and that its severity 'minor', since this is a corner case that should not occur often. I am sorry, this is not the corner case. I need this functionality. And considering that my hosting provider uses Tomcat 4.x, I might be able to persuade him to use a patch, if it were available. My provider does not have intentions to switch to Tomcat 5 now (which has this bug too, by the way). Resin works, and Jetty works with a proxy JSP page. So, for development I can use other servlet containers, but I need Tomcat to be patched for production, including 4.x (at least 4.1.x). I tested my app on 4.0.6, 4.1.31 and 5.0.28, it did not work. Thank you, Michael. I have master jsp page, and I try to jsp:include page=/strutsAction.do, which forwards to detail jsp page, but this does not work. On Tomcat 4.x and 5.x the detail page content is included, but further content from the master page is stripped out. According to jsp specs, if I include a resource with jsp:include, its content should be included in the page. Afaik the spec does not specify nesting level. [skipped] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Indirect jsp:include does not seem to work
Here is what I found at: http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html#8828 The jsp:include element allows you to include either a static or dynamic resource in a JSP page. The results of including static and dynamic resources are quite different. If the resource is static, its content is included in the calling JSP page. If the resource is dynamic, it acts on a request and sends back a result that is included in the JSP page. When the include action is finished, the JSP container continues processing the remainder of the JSP page. So, what I am doing is perfectly legitimate. I include a dynamic resource (spec does not clarify the type of resource or its nesting level). It should return result, to be included in the main page. And JSP container continues processing the remainder of the JSP page, which Tomcat does not do. It is a bug. Resin works exactly as I expect, and Jetty works too with a proxy JSP page. I have not tried other servers yet. Thank you, Michael. On Apr 1, 2005 10:39 AM, Tim Funk [EMAIL PROTECTED] wrote: You cannot perform a forward inside an include. [Just like you can't set any headers, including cookies, in an include or a host of other things while in an include.] -Tim Michael J. wrote: Hello all, I have master jsp page, and I try to jsp:include page=/strutsAction.do, which forwards to detail jsp page, but this does not work. On Tomcat 4.x and 5.x the detail page content is included, but further content from the master page is stripped out. According to jsp specs, if I include a resource with jsp:include, its content should be included in the page. Afaik the spec does not specify nesting level. I looked in the code. ApplicationDispatcher correctly identifies the first request to strutsAction.do as Path Based Include. But when struts action forwards to detail jsp, ApplicationDispatcher identifies it as Path Based Forward. doForward() is called instead of doInclude(), and ApplicationDispatcher flushes and closes the response writer. Thus, Jasper cannot write the rest of master page content to writer, and throws org.apache.jasper.JasperException: Stream closed. Without thinking much, I commented out writer flushing in ApplicationDispatcher.doForward(). It seems to work on Tomcat 4.1.31, but failed on Tomcat 5.0. Anyway, I am not sure that I did a right thing and that all buffers are properly being closed now. Would be great if Tomcat devs look into it. Btw, Jetty does not work as I want, too. BUT: I tried to create a proxy JSP page, which is included in main JSP page. This proxy page includes strutsAction.do, which forwards to real JSP page that I want to include (whew!) Jetty works perfectly fine with this proxy JSP page! Also, Resin works fine both with direct including of struts action from main page, and with proxy JSP page. So, I believe that this is a Tomcat bug. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Indirect jsp:include does not seem to work
A syntax reference is not the same as a specification. Specifications are (supposedly) more rigorous and more precise in their specification of required behaviour. Tomcat is the reference implementation for the Servlet and JSP specifications. It might be helpful if everybody who is interested in this discussion could please read [spec list skipped] I will read the specs, but I am having a deja vu: California Driver's Handbook is for drivers, who don't know how to drive anyway. It is just a funny comics pamphlet. California Vehicle Code is a real thing for cops, and contains all the proper rules. spec-quote version=2.4 section=8.4 Before the forward method of the RequestDispatcher interface returns, the response content must be sent and committed, and closed by the servlet container. /spec-quote Frankly speaking, as a user I don't care about dispatchers, responses and containers. I just want to include a _resource_, which is allowed according to Sun's quick reference card for JSP 1.2. Ok, Sun apparently is screwed up, mixing the requirements, but it should not be my problem, because its syntax reference card works for me :) I want my problem to be solved. And this works in other containers. I understand that Tomcat has to go by the real spec, not by the comics book. Then, in this case spec should be updated. This functionality is important to me. And currently I cannot implement it on Tomcat without a... er... patch, which I did myself and which can break something else. So I would prefer a real fix from Tomcat pros. The language for the 2.3 spec is similar. Bottom line: Resin is wrong ;-). Wrong or not, it works great for me. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]