You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2001/10/04 21:27:58 UTC

cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core ApplicationDispatcher.java LocalStrings.properties LocalStrings_ja.properties StandardContextValve.java StandardHost.java StandardWrapperValve.java

remm        01/10/04 12:27:58

  Modified:    catalina/src/share/org/apache/catalina/core Tag:
                        tomcat_40_branch ApplicationDispatcher.java
                        LocalStrings.properties LocalStrings_ja.properties
                        StandardContextValve.java StandardHost.java
                        StandardWrapperValve.java
  Log:
  - Merge a variety of fixes and small feature additions which have been made
    and debugged in the HEAD branch, including:
    - Removal of Jasper loader (merged with the shared loader).
    - Fixes a lot of spec complaince issue regarding the commit state of the
      response when using forwards, sendError or sendRedirect.
    - Fixes cache consistency issues for static resource serving.
    - Adds content caching for static resources (that's linked to the bugfix
      mentioned just above).
    - Merge enhanced error reporting and error page dispatching (which will be
      able to display error pages for most errors returned from the pipeline -
      like the 401 and 403 returned by the authenticator).
    - Merge the fixes for all the other more recent bugfixes that have been
      fixed in the HEAD branch.
    - Passes all tester and Watchdog tests.
    - Merge a variety of small enhancements to the build scripts which have been
      made in the HEAD branch.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.25.2.1  +25 -18    jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java
  
  Index: ApplicationDispatcher.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java,v
  retrieving revision 1.25
  retrieving revision 1.25.2.1
  diff -u -r1.25 -r1.25.2.1
  --- ApplicationDispatcher.java	2001/08/08 00:31:54	1.25
  +++ ApplicationDispatcher.java	2001/10/04 19:27:58	1.25.2.1
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java,v 1.25 2001/08/08 00:31:54 remm Exp $
  - * $Revision: 1.25 $
  - * $Date: 2001/08/08 00:31:54 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java,v 1.25.2.1 2001/10/04 19:27:58 remm Exp $
  + * $Revision: 1.25.2.1 $
  + * $Date: 2001/10/04 19:27:58 $
    *
    * ====================================================================
    *
  @@ -92,6 +92,7 @@
   import org.apache.catalina.Request;
   import org.apache.catalina.Response;
   import org.apache.catalina.Wrapper;
  +import org.apache.catalina.connector.ResponseFacade;
   import org.apache.catalina.core.StandardWrapper;
   import org.apache.catalina.util.InstanceSupport;
   import org.apache.catalina.util.StringManager;
  @@ -108,7 +109,7 @@
    * <code>javax.servlet.ServletResponseWrapper</code>.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.25 $ $Date: 2001/08/08 00:31:54 $
  + * @version $Revision: 1.25.2.1 $ $Date: 2001/10/04 19:27:58 $
    */
   
   final class ApplicationDispatcher
  @@ -435,23 +436,29 @@
           // Commit and close the response before we return
           if (debug >= 1)
               log(" Committing and closing response");
  -        response.flushBuffer();
  -        try {
  -            PrintWriter writer = response.getWriter();
  -            writer.flush();
  -            writer.close();
  -        } catch (IllegalStateException e) {
  +
  +        if (response instanceof ResponseFacade) {
  +            ((ResponseFacade) response).finish();
  +        } else {
  +            // Close anyway
  +            response.flushBuffer();
               try {
  -                ServletOutputStream stream = response.getOutputStream();
  -                stream.flush();
  -                stream.close();
  -            } catch (IllegalStateException f) {
  -                ;
  -            } catch (IOException f) {
  +                PrintWriter writer = response.getWriter();
  +                writer.flush();
  +                writer.close();
  +            } catch (IllegalStateException e) {
  +                try {
  +                    ServletOutputStream stream = response.getOutputStream();
  +                    stream.flush();
  +                    stream.close();
  +                } catch (IllegalStateException f) {
  +                    ;
  +                } catch (IOException f) {
  +                    ;
  +                }
  +            } catch (IOException e) {
                   ;
               }
  -        } catch (IOException e) {
  -            ;
           }
   
       }
  
  
  
  1.37.2.1  +0 -42     jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/LocalStrings.properties
  
  Index: LocalStrings.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/LocalStrings.properties,v
  retrieving revision 1.37
  retrieving revision 1.37.2.1
  diff -u -r1.37 -r1.37.2.1
  --- LocalStrings.properties	2001/09/16 22:26:33	1.37
  +++ LocalStrings.properties	2001/10/04 19:27:58	1.37.2.1
  @@ -149,45 +149,3 @@
   standardWrapper.unavailable=Marking servlet {0} as unavailable
   standardWrapper.unloadException=Servlet {0} threw unload() exception
   standardWrapper.unloading=Cannot allocate servlet {0} because it is being unloaded
  -http.100=The client may continue ({0}).
  -http.101=The server is switching protocols according to the "Upgrade" header ({0}).
  -http.201=The request succeeded and a new resource ({0}) has been created on the server.
  -http.202=This request was accepted for processing, but has not been completed ({0}).
  -http.203=The meta information presented by the client did not originate from the server ({0}).
  -http.204=The request succeeded but there is no information to return ({0}).
  -http.205=The client should reset the document view which caused this request to be sent ({0}).
  -http.206=The server has fulfilled a partial GET request for this resource ({0}).
  -http.207=Multiple status values have been returned ({0}).
  -http.300=The requested resource ({0}) corresponds to any one of a set of representations, each with its own specific location.
  -http.301=The requested resource ({0}) has moved permanently to a new location.
  -http.302=The requested resource ({0}) has moved temporarily to a new location.
  -http.303=The response to this request can be found under a different URI ({0}).
  -http.304=The requested resource ({0}) is available and has not been modified.
  -http.305=The requested resource ({0}) must be accessed through the proxy given by the "Location" header.
  -http.400=The request sent by the client was syntactically incorrect ({0}).
  -http.401=This request requires HTTP authentication ({0}).
  -http.402=Payment is required for access to this resource ({0}).
  -http.403=Access to the specified resource ({0}) has been forbidden.
  -http.404=The requested resource ({0}) is not available.
  -http.405=The specified HTTP method is not allowed for the requested resource ({0}).
  -http.406=The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers ({0}).
  -http.407=The client must first authenticate itself with the proxy ({0}).
  -http.408=The client did not produce a request within the time that the server was prepared to wait ({0}).
  -http.409=The request could not be completed due to a conflict with the current state of the resource ({0}).
  -http.410=The requested resource ({0}) is no longer available, and no forwarding address is known.
  -http.411=This request cannot be handled without a defined content length ({0}).
  -http.412=A specified precondition has failed for this request ({0}).
  -http.413=The request entity is larger than the server is willing or able to process.
  -http.414=The server refused this request because the request URI was too long ({0}).
  -http.415=The server refused this request because the request entity is in a format not supported by the requested resource for the requested method ({0}).
  -http.416=The requested byte range cannot be satisfied ({0}).
  -http.417=The expectation given in the "Expect" request header ({0}) could not be fulfilled.
  -http.422=The server understood the content type and syntax of the request but was unable to process the contained instructions ({0}).
  -http.423=The source or destination resource of a method is locked ({0}).
  -http.500=The server encountered an internal error ({0}) that prevented it from fulfilling this request.
  -http.501=The server does not support the functionality needed to fulfill this request ({0}).
  -http.502=This server received an invalid response from a server it consulted when acting as a proxy or gateway ({0}).
  -http.503=The requested service ({0}) is not currently available.
  -http.504=The server received a timeout from an upstream server while acting as a gateway or proxy ({0}).
  -http.505=The server does not support the requested HTTP protocol version ({0}).
  -http.507=The resource does not have sufficient space to record the state of the resource after execution of this method ({0}).
  
  
  
  1.2.2.1   +0 -42     jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/LocalStrings_ja.properties
  
  Index: LocalStrings_ja.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/LocalStrings_ja.properties,v
  retrieving revision 1.2
  retrieving revision 1.2.2.1
  diff -u -r1.2 -r1.2.2.1
  --- LocalStrings_ja.properties	2001/09/17 23:14:43	1.2
  +++ LocalStrings_ja.properties	2001/10/04 19:27:58	1.2.2.1
  @@ -149,45 +149,3 @@
   standardWrapper.unavailable=\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8 {0} \u3092\u5229\u7528\u4e0d\u53ef\u80fd\u306b\u30de\u30fc\u30af\u3057\u307e\u3059
   standardWrapper.unloadException=\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8 {0} \u306f\u3001unload()\u4f8b\u5916\u3092\u6295\u3052\u307e\u3057\u305f
   standardWrapper.unloading=\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8 {0} \u304c\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u306a\u3044\u306e\u3067\u3001\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093
  -http.100=The client may continue ({0}).
  -http.101=The server is switching protocols according to the "Upgrade" header ({0}).
  -http.201=The request succeeded and a new resource ({0}) has been created on the server.
  -http.202=This request was accepted for processing, but has not been completed ({0}).
  -http.203=The meta information presented by the client did not originate from the server ({0}).
  -http.204=The request succeeded but there is no information to return ({0}).
  -http.205=The client should reset the document view which caused this request to be sent ({0}).
  -http.206=The server has fulfilled a partial GET request for this resource ({0}).
  -http.207=Multiple status values have been returned ({0}).
  -http.300=The requested resource ({0}) corresponds to any one of a set of representations, each with its own specific location.
  -http.301=The requested resource ({0}) has moved permanently to a new location.
  -http.302=The requested resource ({0}) has moved temporarily to a new location.
  -http.303=The response to this request can be found under a different URI ({0}).
  -http.304=The requested resource ({0}) is available and has not been modified.
  -http.305=The requested resource ({0}) must be accessed through the proxy given by the "Location" header.
  -http.400=The request sent by the client was syntactically incorrect ({0}).
  -http.401=This request requires HTTP authentication ({0}).
  -http.402=Payment is required for access to this resource ({0}).
  -http.403=Access to the specified resource ({0}) has been forbidden.
  -http.404=The requested resource ({0}) is not available.
  -http.405=The specified HTTP method is not allowed for the requested resource ({0}).
  -http.406=The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers ({0}).
  -http.407=The client must first authenticate itself with the proxy ({0}).
  -http.408=The client did not produce a request within the time that the server was prepared to wait ({0}).
  -http.409=The request could not be completed due to a conflict with the current state of the resource ({0}).
  -http.410=The requested resource ({0}) is no longer available, and no forwarding address is known.
  -http.411=This request cannot be handled without a defined content length ({0}).
  -http.412=A specified precondition has failed for this request ({0}).
  -http.413=The request entity is larger than the server is willing or able to process.
  -http.414=The server refused this request because the request URI was too long ({0}).
  -http.415=The server refused this request because the request entity is in a format not supported by the requested resource for the requested method ({0}).
  -http.416=The requested byte range cannot be satisfied ({0}).
  -http.417=The expectation given in the "Expect" request header ({0}) could not be fulfilled.
  -http.422=The server understood the content type and syntax of the request but was unable to process the contained instructions ({0}).
  -http.423=The source or destination resource of a method is locked ({0}).
  -http.500=The server encountered an internal error ({0}) that prevented it from fulfilling this request.
  -http.501=The server does not support the functionality needed to fulfill this request ({0}).
  -http.502=This server received an invalid response from a server it consulted when acting as a proxy or gateway ({0}).
  -http.503=The requested service ({0}) is not currently available.
  -http.504=The server received a timeout from an upstream server while acting as a gateway or proxy ({0}).
  -http.505=The server does not support the requested HTTP protocol version ({0}).
  -http.507=The resource does not have sufficient space to record the state of the resource after execution of this method ({0}).
  
  
  
  1.12.2.1  +8 -49     jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContextValve.java
  
  Index: StandardContextValve.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContextValve.java,v
  retrieving revision 1.12
  retrieving revision 1.12.2.1
  diff -u -r1.12 -r1.12.2.1
  --- StandardContextValve.java	2001/07/25 04:05:50	1.12
  +++ StandardContextValve.java	2001/10/04 19:27:58	1.12.2.1
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContextValve.java,v 1.12 2001/07/25 04:05:50 remm Exp $
  - * $Revision: 1.12 $
  - * $Date: 2001/07/25 04:05:50 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContextValve.java,v 1.12.2.1 2001/10/04 19:27:58 remm Exp $
  + * $Revision: 1.12.2.1 $
  + * $Date: 2001/10/04 19:27:58 $
    *
    * ====================================================================
    *
  @@ -93,7 +93,7 @@
    * when processing HTTP requests.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.12 $ $Date: 2001/07/25 04:05:50 $
  + * @version $Revision: 1.12.2.1 $ $Date: 2001/10/04 19:27:58 $
    */
   
   final class StandardContextValve
  @@ -191,21 +191,12 @@
           try {
               wrapper = (Wrapper) context.map(request, true);
           } catch (IllegalArgumentException e) {
  -            badRequest(requestURI, (HttpServletResponse) response.getResponse());
  -            try {
  -                response.finishResponse();
  -            } catch (IOException f) {
  -                ;
  -            }
  +            badRequest(requestURI, 
  +                       (HttpServletResponse) response.getResponse());
               return;
           }
           if (wrapper == null) {
               notFound(requestURI, (HttpServletResponse) response.getResponse());
  -            try {
  -                response.finishResponse();
  -            } catch (IOException e) {
  -                ;
  -            }
               return;
           }
   
  @@ -232,25 +223,9 @@
       private void badRequest(String requestURI, HttpServletResponse response) {
   
           try {
  -            requestURI = RequestUtil.filter(requestURI);
  -            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
  -            response.setContentType("text/html");
  -            PrintWriter writer = response.getWriter();
  -            writer.println("<html>");
  -            writer.println("<head>");
  -            writer.println("<title>Tomcat Error Report</title>");
  -            writer.println("<body bgcolor=\"white\">");
  -            writer.println("<br><br>");
  -            writer.println("<h1>HTTP Status 400 - " + requestURI + "</h1>");
  -            writer.println(sm.getString("standardContext.badRequest",
  -                                        requestURI));
  -            writer.println("</body>");
  -            writer.println("</html>");
  -            writer.flush();
  +            response.setStatus(HttpServletResponse.SC_BAD_REQUEST, requestURI);
           } catch (IllegalStateException e) {
               ;
  -        } catch (IOException e) {
  -            ;
           }
   
       }
  @@ -267,24 +242,8 @@
       private void notFound(String requestURI, HttpServletResponse response) {
   
           try {
  -            requestURI = RequestUtil.filter(requestURI);
  -            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
  -            response.setContentType("text/html");
  -            PrintWriter writer = response.getWriter();
  -            writer.println("<html>");
  -            writer.println("<head>");
  -            writer.println("<title>Tomcat Error Report</title>");
  -            writer.println("<body bgcolor=\"white\">");
  -            writer.println("<br><br>");
  -            writer.println("<h1>HTTP Status 404 - " + requestURI + "</h1>");
  -            writer.println(sm.getString("standardContext.notFound",
  -                                        requestURI));
  -            writer.println("</body>");
  -            writer.println("</html>");
  -            writer.flush();
  +            response.setStatus(HttpServletResponse.SC_NOT_FOUND, requestURI);
           } catch (IllegalStateException e) {
  -            ;
  -        } catch (IOException e) {
               ;
           }
   
  
  
  
  1.18.2.1  +73 -4     jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardHost.java
  
  Index: StandardHost.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardHost.java,v
  retrieving revision 1.18
  retrieving revision 1.18.2.1
  diff -u -r1.18 -r1.18.2.1
  --- StandardHost.java	2001/08/27 19:10:25	1.18
  +++ StandardHost.java	2001/10/04 19:27:58	1.18.2.1
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardHost.java,v 1.18 2001/08/27 19:10:25 craigmcc Exp $
  - * $Revision: 1.18 $
  - * $Date: 2001/08/27 19:10:25 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardHost.java,v 1.18.2.1 2001/10/04 19:27:58 remm Exp $
  + * $Revision: 1.18.2.1 $
  + * $Date: 2001/10/04 19:27:58 $
    *
    * ====================================================================
    *
  @@ -91,7 +91,9 @@
   import org.apache.catalina.LifecycleListener;
   import org.apache.catalina.Request;
   import org.apache.catalina.Response;
  +import org.apache.catalina.Valve;
   import org.apache.catalina.core.DefaultContext;
  +import org.apache.catalina.valves.ErrorDispatcherValve;
   
   
   /**
  @@ -100,7 +102,8 @@
    * requests directed to a particular web application.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.18 $ $Date: 2001/08/27 19:10:25 $
  + * @author Remy Maucherat
  + * @version $Revision: 1.18.2.1 $ $Date: 2001/10/04 19:27:58 $
    */
   
   public class StandardHost
  @@ -154,6 +157,14 @@
   
   
       /**
  +     * The Java class name of the default error reporter implementation class 
  +     * for deployed web applications.
  +     */
  +    private String errorReportValveClass =
  +        "org.apache.catalina.valves.ErrorReportValve";
  +
  +
  +    /**
        * The descriptive information string for this implementation.
        */
       private static final String info =
  @@ -304,6 +315,34 @@
   
   
       /**
  +     * Return the Java class name of the error report valve class
  +     * for new web applications.
  +     */
  +    public String getErrorReportValveClass() {
  +
  +        return (this.errorReportValveClass);
  +
  +    }
  +
  +
  +    /**
  +     * Set the Java class name of the error report valve class
  +     * for new web applications.
  +     *
  +     * @param errorReportValveClass The new error report valve class
  +     */
  +    public void setErrorReportValveClass(String errorReportValveClass) {
  +
  +        String oldErrorReportValveClassClass = this.errorReportValveClass;
  +        this.errorReportValveClass = errorReportValveClass;
  +        support.firePropertyChange("errorReportValveClass",
  +                                   oldErrorReportValveClassClass, 
  +                                   this.errorReportValveClass);
  +
  +    }
  +
  +
  +    /**
        * Return the canonical, fully qualified, name of the virtual host
        * this Container represents.
        */
  @@ -541,6 +580,36 @@
           sb.append(getName());
           sb.append("]");
           return (sb.toString());
  +
  +    }
  +
  +
  +    /**
  +     * Start this host.
  +     *
  +     * @exception IllegalStateException if this component has already been
  +     *  started
  +     * @exception LifecycleException if this component detects a fatal error
  +     *  that prevents it from being started
  +     */
  +    public synchronized void start() throws LifecycleException {
  +
  +        // Set error report valve
  +        if (errorReportValveClass != null) {
  +            try {
  +                Valve valve = (Valve) Class.forName(errorReportValveClass)
  +                    .newInstance();
  +                addValve(valve);
  +            } catch (Throwable t) {
  +                // FIXME
  +                t.printStackTrace();
  +            }
  +        }
  +
  +        // Set dispatcher valve
  +        addValve(new ErrorDispatcherValve());
  +
  +        super.start();
   
       }
   
  
  
  
  1.30.2.1  +11 -330   jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java
  
  Index: StandardWrapperValve.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java,v
  retrieving revision 1.30
  retrieving revision 1.30.2.1
  diff -u -r1.30 -r1.30.2.1
  --- StandardWrapperValve.java	2001/09/14 20:30:01	1.30
  +++ StandardWrapperValve.java	2001/10/04 19:27:58	1.30.2.1
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java,v 1.30 2001/09/14 20:30:01 craigmcc Exp $
  - * $Revision: 1.30 $
  - * $Date: 2001/09/14 20:30:01 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java,v 1.30.2.1 2001/10/04 19:27:58 remm Exp $
  + * $Revision: 1.30.2.1 $
  + * $Date: 2001/10/04 19:27:58 $
    *
    * ====================================================================
    *
  @@ -103,7 +103,7 @@
    * <code>StandardWrapper</code> container implementation.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.30 $ $Date: 2001/09/14 20:30:01 $
  + * @version $Revision: 1.30.2.1 $ $Date: 2001/10/04 19:27:58 $
    */
   
   final class StandardWrapperValve
  @@ -229,7 +229,7 @@
   
           // Create the filter chain for this request
           ApplicationFilterChain filterChain =
  -          createFilterChain(request, servlet);
  +            createFilterChain(request, servlet);
   
           // Call the filter chain for this request
           // NOTE: This also calls the servlet's service() method
  @@ -321,12 +321,6 @@
               }
           }
   
  -
  -        // Generate a response for the generated HTTP status and message
  -        if (throwable == null) {
  -            status(request, response);
  -        }
  -
       }
   
   
  @@ -442,66 +436,6 @@
   
   
       /**
  -     * Handle an HTTP status code or Java exception by forwarding control
  -     * to the location included in the specified errorPage object.  It is
  -     * assumed that the caller has already recorded any request attributes
  -     * that are to be forwarded to this page.  Return <code>true</code> if
  -     * we successfully utilized the specified error page location, or
  -     * <code>false</code> if the default error report should be rendered.
  -     *
  -     * @param request The request being processed
  -     * @param response The response being generated
  -     * @param errorPage The errorPage directive we are obeying
  -     */
  -    private boolean custom(Request request, Response response,
  -                           ErrorPage errorPage) {
  -
  -        if (debug >= 1)
  -            log("Processing " + errorPage);
  -
  -        // Validate our current environment
  -        if (!(request instanceof HttpRequest)) {
  -            if (debug >= 1)
  -                log(" Not processing an HTTP request --> default handling");
  -            return (false);     // NOTE - Nothing we can do generically
  -        }
  -        HttpServletRequest hreq =
  -            (HttpServletRequest) request.getRequest();
  -        if (!(response instanceof HttpResponse)) {
  -            if (debug >= 1)
  -                log("Not processing an HTTP response --> default handling");
  -            return (false);     // NOTE - Nothing we can do generically
  -        }
  -        HttpServletResponse hres =
  -            (HttpServletResponse) response.getResponse();
  -
  -        try {
  -
  -            // Reset the response if possible (else IllegalStateException)
  -            hres.reset();
  -
  -            // Forward control to the specified location
  -            ServletContext servletContext =
  -                ((Context) container.getParent()).getServletContext();
  -            RequestDispatcher rd =
  -                servletContext.getRequestDispatcher(errorPage.getLocation());
  -            rd.forward(hreq, hres);
  -
  -            // Indicate that we have successfully processed this custom page
  -            return (true);
  -
  -        } catch (Throwable t) {
  -
  -            // Report our failure to process this custom page
  -            log("Exception Processing " + errorPage, t);
  -            return (false);
  -
  -        }
  -
  -    }
  -
  -
  -    /**
        * Handle the specified ServletException encountered while processing
        * the specified Request to produce the specified Response.  Any
        * exceptions that occur during generation of the exception report are
  @@ -514,156 +448,14 @@
        */
       private void exception(Request request, Response response,
                              Throwable exception) {
  -
  -        // Handle a custom error page for this status code
  -        if (debug >= 1)
  -            log("Handling exception: " + exception);
  -        Context context = (Context) container.getParent();
  -        Throwable realError = exception;
  -        ErrorPage errorPage = findErrorPage(context, realError);
  -        if ((errorPage == null) && (realError instanceof ServletException)) {
  -            realError = ((ServletException) exception).getRootCause();
  -            if (realError != null)
  -                errorPage = findErrorPage(context, realError);
  -            else
  -                realError = exception;
  -        }
  -        if (errorPage != null) {
  -            //            if (debug >= 1)
  -            //                log(" Sending to custom error page " + errorPage);
  -            ServletRequest sreq = request.getRequest();
  -            sreq.setAttribute(Globals.ERROR_MESSAGE_ATTR,
  -                              exception.getMessage());
  -            sreq.setAttribute(Globals.EXCEPTION_ATTR,
  -                              exception);
  -            Wrapper wrapper = (Wrapper) getContainer();
  -            sreq.setAttribute(Globals.SERVLET_NAME_ATTR,
  -                              wrapper.getName());
  -            if (sreq instanceof HttpServletRequest)
  -                sreq.setAttribute(Globals.EXCEPTION_PAGE_ATTR,
  -                                  ((HttpServletRequest) sreq).getRequestURI());
  -            sreq.setAttribute(Globals.EXCEPTION_TYPE_ATTR,
  -                              exception.getClass());
  -            if (custom(request, response, errorPage))
  -                return;
  -        }
  -
  -        // The response is an error
  -        response.setError();
  -
  -        // Reset the response (if possible)
  -        //        if (debug >= 1)
  -        //            log(" Resetting response");
  -        try {
  -            response.getResponse().reset();
  -        } catch (IllegalStateException e) {
  -            //            if (debug >= 1)
  -            //                log("  IllegalStateException: " + e.toString());
  -            ;
  -        }
  -
  -        // Indicate an INTERNAL SERVER ERROR status (if possible)
  -        try {
  -            //            if (debug >= 1)
  -            //                log(" Sending INTERNAL_SERVER_ERROR");
  -            ServletResponse sresponse = response.getResponse();
  -            if (sresponse instanceof HttpServletResponse)
  -                ((HttpServletResponse) sresponse).sendError
  -                    (HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  -        } catch (IllegalStateException e) {
  -            //            if (debug >= 1)
  -            //                log("  IllegalStateException: " + e.toString());
  -            ;
  -        } catch (IOException e) {
  -            //            if (debug >= 1)
  -            //                log("  IOException: " + e.toString());
  -            ;
  -        }
   
  -        // Render a default HTML exception report page
  -        Throwable rootCause = null;
  -        if (exception instanceof ServletException)
  -            rootCause = ((ServletException) exception).getRootCause();
  -        try {
  -            //            if (debug >= 1)
  -            //                log(" Setting content type to text/html");
  -            try {
  -                response.getResponse().setContentType("text/html");
  -            } catch (Throwable t) {
  -                //                if (debug >= 1)
  -                //                    log("  Throwable: " + t.toString());
  -                ;
  -            }
  -            //            if (debug >= 1)
  -            //                log(" Getting reporter writer");
  -            PrintWriter writer = response.getReporter();
  -            //            if (debug >= 1)
  -            //                log(" Writing standard error report page");
  -            writer.println("<html>");
  -            writer.println("<head>");
  -            writer.println("<title>" +
  -                           sm.getString("standardWrapper.exception0") +
  -                           "</title>");
  -            writer.println("</head>");
  -            writer.println("<body bgcolor=\"white\">");
  -            writer.println("<br><br>");
  -            writer.println("<h1>" +
  -                           sm.getString("standardWrapper.exception1") +
  -                           "</h1>");
  -            if (rootCause != null)
  -                writer.println("<h3>" +
  -                               sm.getString("standardWrapper.exception2") +
  -                               "</h3>");
  -            writer.println("<pre>");
  -            exception.printStackTrace(writer);
  -            writer.println("</pre>");
  -            if (rootCause != null) {
  -                writer.println("<h3>" +
  -                               sm.getString("standardWrapper.exception3") +
  -                               "</h3>");
  -                writer.println("<pre>");
  -                rootCause.printStackTrace(writer);
  -                writer.println("</pre>");
  -            }
  -            writer.println("</body>");
  -            writer.println("</html>");
  -            writer.flush();
  -        } catch (IllegalStateException e) {
  -            //            if (debug >= 1)
  -            //                log("  IllegalStateException:", e);
  -            ;
  -        }
  -        //        if (debug >= 1)
  -        //            log(" Finished with exception() report");
  -
  -    }
  -
  -
  -    /**
  -     * Find and return the ErrorPage instance for the specified exception's
  -     * class, or an ErrorPage instance for the closest superclass for which
  -     * there is such a definition.  If no associated ErrorPage instance is
  -     * found, return <code>null</code>.
  -     *
  -     * @param context The Context in which to search
  -     * @param exception The exception for which to find an ErrorPage
  -     */
  -    private ErrorPage findErrorPage(Context context, Throwable exception) {
  +        ServletRequest sreq = request.getRequest();
  +        sreq.setAttribute(Globals.EXCEPTION_ATTR, exception);
   
  -        if (exception == null)
  -            return (null);
  -        Class clazz = exception.getClass();
  -        String name = clazz.getName();
  -        while (!"java.lang.Object".equals(clazz)) {
  -            ErrorPage errorPage = context.findErrorPage(name);
  -            if (errorPage != null)
  -                return (errorPage);
  -            clazz = clazz.getSuperclass();
  -            if (clazz == null)
  -                break;
  -            name = clazz.getName();
  -        }
  -        return (null);
  +        ServletResponse sresponse = response.getResponse();
  +        if (sresponse instanceof HttpServletResponse)
  +            ((HttpServletResponse) sresponse).setStatus
  +                (HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
   
       }
   
  @@ -796,117 +588,6 @@
   
           // Case 4 - "Default" Match
           return (false); // NOTE - Not relevant for selecting filters
  -
  -    }
  -
  -
  -    /**
  -     * Handle the HTTP status code (and corresponding message) generated
  -     * while processing the specified Request to produce the specified
  -     * Response.  Any exceptions that occur during generation of the error
  -     * report are logged and swallowed.
  -     *
  -     * @param request The request being processed
  -     * @param response The response being generated
  -     */
  -    private void status(Request request, Response response) {
  -
  -        // Do nothing on non-HTTP responses
  -        if (!(response instanceof HttpResponse))
  -            return;
  -        HttpResponse hresponse = (HttpResponse) response;
  -        if (!(response.getResponse() instanceof HttpServletResponse))
  -            return;
  -        HttpServletResponse hres =
  -            (HttpServletResponse) response.getResponse();
  -        int statusCode = hresponse.getStatus();
  -        String message = RequestUtil.filter(hresponse.getMessage());
  -        if (message == null)
  -            message = "";
  -
  -        // Do nothing on a 1xx status
  -        if (statusCode < 200)
  -            return;
  -        // Do nothing on an OK status
  -        if (statusCode == HttpServletResponse.SC_OK)
  -            return;
  -        // Do nothing on a NO MODIFIED status
  -        if (statusCode == HttpServletResponse.SC_NOT_MODIFIED)
  -            return;
  -        // Do nothing on a NO CONTENT status
  -        if (statusCode == HttpServletResponse.SC_NO_CONTENT)
  -            return;
  -
  -        // Handle a custom error page for this status code
  -        Context context = (Context) container.getParent();
  -        ErrorPage errorPage = context.findErrorPage(statusCode);
  -        if (errorPage != null) {
  -            ServletRequest sreq = request.getRequest();
  -            sreq.setAttribute(Globals.STATUS_CODE_ATTR,
  -                              new Integer(statusCode));
  -            sreq.setAttribute(Globals.ERROR_MESSAGE_ATTR,
  -                              message);
  -            Wrapper wrapper = (Wrapper) getContainer();
  -            sreq.setAttribute(Globals.SERVLET_NAME_ATTR,
  -                              wrapper.getName());
  -            if (sreq instanceof HttpServletRequest)
  -                sreq.setAttribute(Globals.EXCEPTION_PAGE_ATTR,
  -                                  ((HttpServletRequest) sreq).getRequestURI());
  -            if (custom(request, response, errorPage))
  -                return;
  -        }
  -
  -        // Do nothing if there is no report for the specified status code
  -        String report = null;
  -        try {
  -            report = sm.getString("http." + statusCode, message);
  -        } catch (Throwable t) {
  -            ;
  -        }
  -        if (report == null)
  -            return;
  -
  -        // Reset the response data buffer (if possible)
  -        try {
  -            if (hresponse.isError())
  -                hresponse.reset(statusCode, message);
  -        } catch (Throwable e) {
  -            if (debug >= 1)
  -                log("status.reset", e);
  -        }
  -
  -        // Render a default HTML status report page
  -        try {
  -            try {
  -                hres.setContentType("text/html");
  -            } catch (Throwable t) {
  -                if (debug >= 1)
  -                    log("status.setContentType", t);
  -            }
  -            PrintWriter writer = response.getReporter();
  -            if (writer != null) {
  -                writer.println("<html>");
  -                writer.println("<head>");
  -                writer.println("<title>" +
  -                               sm.getString("standardWrapper.statusTitle") +
  -                               "</title>");
  -                writer.println("</head>");
  -                writer.println("<body bgcolor=\"white\">");
  -                writer.println("<br><br>");
  -                writer.println("<h1>" +
  -                               sm.getString("standardWrapper.statusHeader",
  -                                            "" + statusCode, message) +
  -                               "</h1>");
  -                writer.println(report);
  -                writer.println("</body>");
  -                writer.println("</html>");
  -                writer.flush();
  -            }
  -        } catch (IllegalStateException e) {
  -            if (debug >= 1)
  -                log("status.write", e);
  -        }
  -
   
       }