tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bernard <...@actrix.gen.nz>
Subject Re: Removing the default server error pages
Date Wed, 15 Jun 2005 09:41:43 GMT
Hi Rob,

I have the same problem as you have.
I can tell you what I did but it is not as good as I want it to be.
Maybe others will help us with a better solution.

So I wrote SilentErrorValve.java. This is insufficient because one has
to have a response otherwise (in my case with apache httpd amd
mod_jk), I get 2 errors, the second being an error from mod_jk where
the error page is not found. But it is a start, and at least I don't
get a stack trace which was my primary objective.

To enable the custom response, I need the attribute
errorReportValveClass="mypackage.SilentErrorValve" in every <Host
entry in server.xml.

What I would prefer is to put the HTML code instead of a file into
web.xml such as (I am making this up - it would not work):
<error-page>
     <error-code>404</error-code>
     <content>
         <html><![CDATA[<body>Not found</body>]]></html>
     </content>
</error-page>


But that is still ugly. What I would really like is that Tomcat and
mod_jk would pass on every error to Apache httpd as a 500 server
error. The reason is that in any case httpd has to have error response
pages and everyone hates creating two sets of pages for the same
thing.

In my case, tomcat does not serve any static pages, only generated
content, so it does not even have a document directory where it could
read files from.

BTW where is the correct use of <error-page> documented?


Regards,
Bernard

package mypackage;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.Globals;
import org.apache.catalina.valves.ValveBase;

public class SilentErrorValve extends ValveBase{
    /**
     * Invoke the next Valve in the sequence. When the invoke returns,
check
     * the response state, and output an error report is necessary.
     *
     * @param request The servlet request to be processed
     * @param response The servlet response to be created
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet error occurs
     */
    public void invoke(Request request, Response response)
        throws IOException, ServletException {

        // Perform the request
        getNext().invoke(request, response);

        ServletRequest sreq = (ServletRequest) request;
        Throwable throwable =
            (Throwable) sreq.getAttribute(Globals.EXCEPTION_ATTR);

        ServletResponse sresp = (ServletResponse) response;
        if (sresp.isCommitted()) {
            return;
        }

        if (throwable != null) {

            // The response is an error
            response.setError();

            // Reset the response (if possible)
            try {
                sresp.reset();
            } catch (IllegalStateException e) {
                ;
            }

            response.sendError
                (HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

        }

        response.setSuspended(false);

// The difference from ErrorReportValve is that we don't return a
report
// in the response.
//        try {
//            report(request, response, throwable);
//        } catch (Throwable tt) {
//            tt.printStackTrace();
//        }

    }
    
    
    
}







On Wed, 15 Jun 2005 09:17:35 +0100, you wrote:

>Hi there, I am using tomcat 5.5 as an RTSP server, and I need to send
>response codes back, but I do not need to send any HTML response back. I
>know that I can change the response page that is returned by editing web.xml
>and adding the following
>
><error-page>
>     <error-code>404</error-code>
>     <location>/index.html</location>
></error-page>
>
>But what I need is to prevent tomcat from sending an error page altogether.
>It seems to me that I could get all of the error codes to redirect to an
>empty page, but this is sloppy, I would much rather change something to
>prevent tomcat from sending a page back.
>
>Any help much appreciated
>
>Rob
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Mime
View raw message