remm        01/01/04 11:49:24

  Modified:    catalina/src/share/org/apache/catalina Response.java
               catalina/src/share/org/apache/catalina/connector
                        HttpResponseBase.java ResponseBase.java
               catalina/src/share/org/apache/catalina/connector/http
                        SocketInputStream.java
               catalina/src/share/org/apache/catalina/core
                        StandardWrapperValve.java
  Log:
  - Added an error flag to the Response. If the flag is set to true, then the
    response is an error report.
  - The error flag is set to true if :
    - An exception is thrown by the servlet
    - sendError is used by the servlet
  - The reporter can now not return a writer if :
    - The response is not an error report
    - The "client" servlet had used the output stream
    In that case, no status report is shown (and it's the responsability of the
    servlet to take care of that). Also, the getReporter actually sends the wrapped
    input stream, instead of directly using the socket output.
  
  Revision  Changes    Path
  1.2       +22 -4     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Response.java
  
  Index: Response.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Response.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Response.java     2000/08/11 05:24:11     1.1
  +++ Response.java     2001/01/04 19:49:12     1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Response.java,v 
1.1 2000/08/11 05:24:11 craigmcc Exp $
  - * $Revision: 1.1 $
  - * $Date: 2000/08/11 05:24:11 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Response.java,v 
1.2 2001/01/04 19:49:12 remm Exp $
  + * $Revision: 1.2 $
  + * $Date: 2001/01/04 19:49:12 $
    *
    * ====================================================================
    *
  @@ -79,7 +79,7 @@
    * based on the processing of a corresponding <code>Request</code>.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.1 $ $Date: 2000/08/11 05:24:11 $
  + * @version $Revision: 1.2 $ $Date: 2001/01/04 19:49:12 $
    */
   
   public interface Response {
  @@ -181,6 +181,18 @@
       public void setStream(OutputStream stream);
   
   
  +    /**
  +     * Set the error flag.
  +     */
  +    public void setError();
  +
  +
  +    /**
  +     * Error flag accessor.
  +     */
  +    public boolean isError();
  +
  +
       // --------------------------------------------------------- Public Methods
   
   
  @@ -218,6 +230,12 @@
       /**
        * Return a PrintWriter that can be used to render error messages,
        * regardless of whether a stream or writer has already been acquired.
  +     * 
  +     * @return Writer which can be used for error reports. If the response is
  +     * not an error report returned using sendError or triggered by an 
  +     * unexpected exception thrown during the servlet processing 
  +     * (and only in that case), null will be returned if the response stream 
  +     * has already been used.
        */
       public PrintWriter getReporter();
   
  
  
  
  1.23      +7 -4      
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseBase.java
  
  Index: HttpResponseBase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseBase.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- HttpResponseBase.java     2000/12/17 01:05:39     1.22
  +++ HttpResponseBase.java     2001/01/04 19:49:16     1.23
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseBase.java,v
 1.22 2000/12/17 01:05:39 craigmcc Exp $
  - * $Revision: 1.22 $
  - * $Date: 2000/12/17 01:05:39 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseBase.java,v
 1.23 2001/01/04 19:49:16 remm Exp $
  + * $Revision: 1.23 $
  + * $Date: 2001/01/04 19:49:16 $
    *
    * ====================================================================
    *
  @@ -96,7 +96,8 @@
    * methods need to be implemented.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.22 $ $Date: 2000/12/17 01:05:39 $
  + * @author Remy Maucherat
  + * @version $Revision: 1.23 $ $Date: 2001/01/04 19:49:16 $
    */
   
   public class HttpResponseBase
  @@ -975,6 +976,8 @@
   
        if (included)
            return;     // Ignore any call from an included servlet
  +
  +        setError();
   
        // Record the status code and message.
        this.status = status;
  
  
  
  1.9       +52 -9     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseBase.java
  
  Index: ResponseBase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseBase.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ResponseBase.java 2000/12/13 23:45:37     1.8
  +++ ResponseBase.java 2001/01/04 19:49:16     1.9
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseBase.java,v
 1.8 2000/12/13 23:45:37 craigmcc Exp $
  - * $Revision: 1.8 $
  - * $Date: 2000/12/13 23:45:37 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseBase.java,v
 1.9 2001/01/04 19:49:16 remm Exp $
  + * $Revision: 1.9 $
  + * $Date: 2001/01/04 19:49:16 $
    *
    * ====================================================================
    *
  @@ -88,7 +88,7 @@
    * the connector-specific methods need to be implemented.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.8 $ $Date: 2000/12/13 23:45:37 $
  + * @version $Revision: 1.9 $ $Date: 2001/01/04 19:49:16 $
    */
   
   public abstract class ResponseBase
  @@ -204,6 +204,12 @@
       protected PrintWriter writer = null;
   
   
  +    /**
  +     * Error flag. True if the response is an error report.
  +     */
  +    protected boolean error = false;
  +
  +
       // ------------------------------------------------------------- Properties
   
   
  @@ -352,6 +358,26 @@
       }
   
   
  +    /**
  +     * Set the error flag.
  +     */
  +    public void setError() {
  +
  +        this.error = true;
  +
  +    }
  +
  +
  +    /**
  +     * Error flag accessor.
  +     */
  +    public boolean isError() {
  +
  +        return (this.error);
  +
  +    }
  +
  +
       // --------------------------------------------------------- Public Methods
   
   
  @@ -430,13 +456,29 @@
        * regardless of whether a stream or writer has already been acquired.
        */
       public PrintWriter getReporter() {
  +
  +        if (isError()) {
  +
  +            try {
  +                flushBuffer();
  +            } catch (IOException e) {
  +                ;
  +            }
  +            return (new PrintWriter(output));
  +
  +        } else {
  +
  +            if (this.stream != null) {
  +                return null;
  +            } else {
  +                try {
  +                    return (new PrintWriter(getOutputStream()));
  +                } catch (IOException e) {
  +                    return null;
  +                }
  +            }
   
  -        try {
  -            flushBuffer();
  -        } catch (IOException e) {
  -            ;
           }
  -     return (new PrintWriter(output));
   
       }
   
  @@ -462,6 +504,7 @@
        request = null;
        stream = null;
        writer = null;
  +        error = false;
   
       }
   
  
  
  
  1.5       +8 -4      
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java
  
  Index: SocketInputStream.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SocketInputStream.java    2000/12/02 03:51:31     1.4
  +++ SocketInputStream.java    2001/01/04 19:49:20     1.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v
 1.4 2000/12/02 03:51:31 remm Exp $
  - * $Revision: 1.4 $
  - * $Date: 2000/12/02 03:51:31 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v
 1.5 2001/01/04 19:49:20 remm Exp $
  + * $Revision: 1.5 $
  + * $Date: 2001/01/04 19:49:20 $
    *
    * ====================================================================
    * 
  @@ -165,7 +165,11 @@
           // Checking for a blank line
           int chr = 0;
           do { // Skipping CR or LF
  -            chr = read();
  +            try {
  +                chr = read();
  +            } catch (IOException e) {
  +                chr = -1;
  +            }
           } while ((chr == CR) || (chr == LF));
           if (chr == -1)
               throw new EOFException
  
  
  
  1.15      +29 -24    
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.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- StandardWrapperValve.java 2000/11/02 23:04:49     1.14
  +++ StandardWrapperValve.java 2001/01/04 19:49:22     1.15
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java,v
 1.14 2000/11/02 23:04:49 craigmcc Exp $
  - * $Revision: 1.14 $
  - * $Date: 2000/11/02 23:04:49 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java,v
 1.15 2001/01/04 19:49:22 remm Exp $
  + * $Revision: 1.15 $
  + * $Date: 2001/01/04 19:49:22 $
    *
    * ====================================================================
    *
  @@ -101,7 +101,7 @@
    * <code>StandardWrapper</code> container implementation.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.14 $ $Date: 2000/11/02 23:04:49 $
  + * @version $Revision: 1.15 $ $Date: 2001/01/04 19:49:22 $
    */
   
   final class StandardWrapperValve
  @@ -522,6 +522,9 @@
                return;
        }
   
  +        // The response is an error
  +        response.setError();
  +
        // Reset the response (if possible)
           //        if (debug >= 1)
           //            log(" Resetting response");
  @@ -795,14 +798,14 @@
            return;
   
        // Reset the response data buffer (if possible)
  -     try {
  -            //           response.resetBuffer();
  -         hresponse.reset(statusCode, message);
  +        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 {
  @@ -812,22 +815,24 @@
                       log("status.setContentType", t);
            }
            PrintWriter writer = response.getReporter();
  -         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();
  +            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);
  
  
  

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

Reply via email to