Indirect jsp:include does not seem to work

2005-04-01 Thread Michael J.
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

2005-04-01 Thread Michael J.
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

2005-04-01 Thread Michael J.
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

2005-04-01 Thread Michael J.
 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]