[EMAIL PROTECTED] wrote:
>       I'm having some trouble getting the c:import tag to work right.
> It seems to be perfectly fine when the request that tomcat receives is
> a GET request.  However, when it receives a HEAD request instead, c:import
> never actually reads the data.

>     System.out.println("FOO:[" + pageContext.getAttribute("foo") + "]");

Logically, why would you expect a pageContext to be created in the
absence of a request for a "page"?  :-)

However, from the Servlet Spec --
  protected void doHead(HttpServletRequest req,
        HttpServletResponse resp)
        throws ServletException, IOException
  Receives an HTTP HEAD request from the protected service method
  and handles the request. The client sends a HEAD request when it
  wants to see only the headers of a response, such as Content-Type
  or Content-Length. The HTTP HEAD method counts the output bytes
  in the response to set the Content-Length header accurately.

  If you override this method, you can avoid computing the response
  body and just set the response headers directly to improve
  performance. <snip/>...

So it sounds like Tomcat's doHead() is doing exactly that. Which means
the Content-Length value supplied (test: TC 5.5.9) is different for a
GET vs. HEAD request in your scenario. Which sounds bad to me, but the
HTTP 1.1 spec says --

   9.4 HEAD

   The HEAD method is identical to GET except that the server MUST NOT
   return a message-body in the response. The metainformation contained
   in the HTTP headers in response to a HEAD request SHOULD be identical
   to the information sent in response to a GET request. This method can
   be used for obtaining metainformation about the entity implied by the
   request without transferring the entity-body itself. <snip/>...

I'd think the SHOULD above would be a MUST, but since it's not, it's
apparently "legal", if (IMHO) ill-advised, to return different values
of Content-Length for HEAD and GET requests for the same object.

Trying a similar test with Apache httpd (2.0.52), though, results in
*no* Content-Length returned from a HEAD request for a page with a
dynamic include component, while HEAD/GET requests for a static page
each return the same Content-Length value.

So is the Tomcat behavior a bug? I'd at least call it undesirable,
but the easiest and most performant fix would be for doHead() to not
return Content-Length at all; the more-useful-but-slower approach
would be to build the page/count bytes/discard and I'm not sure I'd
want to see that...

Perhaps someone else will have an opinion :-)

-- 
Hassan Schroeder ----------------------------- [EMAIL PROTECTED]
Webtuitive Design ===  (+1) 408-938-0567   === http://webtuitive.com

                          dream.  code.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to