> From: Nathan Potter [mailto:n...@opendap.org]
> Subject: Re: Tomcat returns HTTP status of 200 when
> HttpServletResponse.sendError() called.
>
> My guess is I have fouled up the servlet mapping...

It looks o.k. to me (other than the aforementioned /docs mapping), but this 
discussion does trigger a memory: as currently coded, the DefaultServlet 
doesn't take into account the <servlet-mapping> used to invoke it.  It assumes 
its references start at the base of the webapp, rather than some number of 
directories deeper.  I think the code at lines 299 - 302 (6.0.18 level) in the 
getRelativePath() method of DefaultServlet should really be:

        String result = request.getPathInfo();
        if (result == null) {
            result = request.getServletPath();
        } else {
            result = request.getServletPath() + result;
        }

Turn on debugging in the DefaultServlet <init-param> to verify that's what's 
happening.

You could try implementing your own class that extends DefaultServlet and 
overrides only the getRelativePath() method with the above modification to see 
what happens.  Here's the complete - but untested - code for the suggested 
revised method:

    protected String getRelativePath(HttpServletRequest request) {
        // Are we being processed by a RequestDispatcher.include()?
        if (request.getAttribute(Globals.INCLUDE_REQUEST_URI_ATTR) != null) {
            String result = 
(String)request.getAttribute(Globals.INCLUDE_PATH_INFO_ATTR);
            if (result == null) {
                result = 
(String)request.getAttribute(Globals.INCLUDE_SERVLET_PATH_ATTR);
            }
            if (result == null || result.equals("")) result = "/";
            return result;
        }
        // No, extract the desired path directly from the request.
        String result = request.getPathInfo();
        if (result == null) {
            result = request.getServletPath();
        } else {
            result = request.getServletPath() + result;
        }
        if (result == null || result.equals("")) result = "/";
        return result;
    }

There are no explicit constuctors for DefaultServlet, so you won't need any 
either.

 - Chuck


THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY 
MATERIAL and is thus for use only by the intended recipient. If you received 
this in error, please contact the sender and delete the e-mail and its 
attachments from all computers.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to