remm        01/10/04 12:26:57

  Modified:    catalina/src/share/org/apache/catalina/connector Tag:
                        tomcat_40_branch HttpResponseBase.java
                        HttpResponseFacade.java ResponseBase.java
                        ResponseFacade.java ResponseStream.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.37.2.1  +4 -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.37
  retrieving revision 1.37.2.1
  diff -u -r1.37 -r1.37.2.1
  --- HttpResponseBase.java     2001/08/24 23:06:08     1.37
  +++ HttpResponseBase.java     2001/10/04 19:26:57     1.37.2.1
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseBase.java,v
 1.37 2001/08/24 23:06:08 craigmcc Exp $
  - * $Revision: 1.37 $
  - * $Date: 2001/08/24 23:06:08 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseBase.java,v
 1.37.2.1 2001/10/04 19:26:57 remm Exp $
  + * $Revision: 1.37.2.1 $
  + * $Date: 2001/10/04 19:26:57 $
    *
    * ====================================================================
    *
  @@ -101,7 +101,7 @@
    *
    * @author Craig R. McClanahan
    * @author Remy Maucherat
  - * @version $Revision: 1.37 $ $Date: 2001/08/24 23:06:08 $
  + * @version $Revision: 1.37.2.1 $ $Date: 2001/10/04 19:26:57 $
    */
   
   public class HttpResponseBase
  
  
  
  1.2.2.1   +73 -4     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseFacade.java
  
  Index: HttpResponseFacade.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseFacade.java,v
  retrieving revision 1.2
  retrieving revision 1.2.2.1
  diff -u -r1.2 -r1.2.2.1
  --- HttpResponseFacade.java   2001/07/22 20:25:06     1.2
  +++ HttpResponseFacade.java   2001/10/04 19:26:57     1.2.2.1
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseFacade.java,v
 1.2 2001/07/22 20:25:06 pier Exp $
  - * $Revision: 1.2 $
  - * $Date: 2001/07/22 20:25:06 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseFacade.java,v
 1.2.2.1 2001/10/04 19:26:57 remm Exp $
  + * $Revision: 1.2.2.1 $
  + * $Date: 2001/10/04 19:26:57 $
    *
    * ====================================================================
    *
  @@ -79,7 +79,7 @@
    *
    * @author Remy Maucherat
    * @author Craig R. McClanahan
  - * @version $Revision: 1.2 $ $Date: 2001/07/22 20:25:06 $
  + * @version $Revision: 1.2.2.1 $ $Date: 2001/10/04 19:26:57 $
    */
   
   public final class HttpResponseFacade
  @@ -104,7 +104,12 @@
   
   
       public void addCookie(Cookie cookie) {
  +
  +        if (isCommitted())
  +            return;
  +
           ((HttpServletResponse) response).addCookie(cookie);
  +
       }
   
   
  @@ -135,59 +140,123 @@
   
       public void sendError(int sc, String msg)
           throws IOException {
  +
  +        if (isCommitted())
  +            throw new IllegalStateException
  +                (/*sm.getString("responseBase.reset.ise")*/);
  +
  +        resp.setAppCommitted(true);
  +
           ((HttpServletResponse) response).sendError(sc, msg);
  +
       }
   
   
       public void sendError(int sc)
           throws IOException {
  +
  +        if (isCommitted())
  +            throw new IllegalStateException
  +                (/*sm.getString("responseBase.reset.ise")*/);
  +
  +        resp.setAppCommitted(true);
  +
           ((HttpServletResponse) response).sendError(sc);
  +
       }
   
   
       public void sendRedirect(String location)
           throws IOException {
  +
  +        if (isCommitted())
  +            throw new IllegalStateException
  +                (/*sm.getString("responseBase.reset.ise")*/);
  +
  +        resp.setAppCommitted(true);
  +
           ((HttpServletResponse) response).sendRedirect(location);
  +
       }
   
   
       public void setDateHeader(String name, long date) {
  +
  +        if (isCommitted())
  +            return;
  +
           ((HttpServletResponse) response).setDateHeader(name, date);
  +
       }
   
   
       public void addDateHeader(String name, long date) {
  +
  +        if (isCommitted())
  +            return;
  +
           ((HttpServletResponse) response).addDateHeader(name, date);
  +
       }
   
   
       public void setHeader(String name, String value) {
  +
  +        if (isCommitted())
  +            return;
  +
           ((HttpServletResponse) response).setHeader(name, value);
  +
       }
   
   
       public void addHeader(String name, String value) {
  +
  +        if (isCommitted())
  +            return;
  +
           ((HttpServletResponse) response).addHeader(name, value);
  +
       }
   
   
       public void setIntHeader(String name, int value) {
  +
  +        if (isCommitted())
  +            return;
  +
           ((HttpServletResponse) response).setIntHeader(name, value);
  +
       }
   
   
       public void addIntHeader(String name, int value) {
  +
  +        if (isCommitted())
  +            return;
  +
           ((HttpServletResponse) response).addIntHeader(name, value);
  +
       }
   
   
       public void setStatus(int sc) {
  +
  +        if (isCommitted())
  +            return;
  +
           ((HttpServletResponse) response).setStatus(sc);
  +
       }
   
   
       public void setStatus(int sc, String sm) {
  +
  +        if (isCommitted())
  +            return;
  +
           ((HttpServletResponse) response).setStatus(sc, sm);
  +
       }
   
   
  
  
  
  1.16.2.1  +73 -4     
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.16
  retrieving revision 1.16.2.1
  diff -u -r1.16 -r1.16.2.1
  --- ResponseBase.java 2001/08/02 01:43:58     1.16
  +++ ResponseBase.java 2001/10/04 19:26:57     1.16.2.1
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseBase.java,v
 1.16 2001/08/02 01:43:58 remm Exp $
  - * $Revision: 1.16 $
  - * $Date: 2001/08/02 01:43:58 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseBase.java,v
 1.16.2.1 2001/10/04 19:26:57 remm Exp $
  + * $Revision: 1.16.2.1 $
  + * $Date: 2001/10/04 19:26:57 $
    *
    * ====================================================================
    *
  @@ -88,7 +88,8 @@
    * the connector-specific methods need to be implemented.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.16 $ $Date: 2001/08/02 01:43:58 $
  + * @author Remy Maucherat
  + * @version $Revision: 1.16.2.1 $ $Date: 2001/10/04 19:26:57 $
    */
   
   public abstract class ResponseBase
  @@ -99,6 +100,12 @@
   
   
       /**
  +     * Has this response been committed by the application yet?
  +     */
  +    protected boolean appCommitted = false;
  +
  +
  +    /**
        * The buffer through which all of our output bytes are passed.
        */
       protected byte[] buffer = new byte[1024];
  @@ -204,6 +211,12 @@
   
   
       /**
  +     * Has this response output been suspended?
  +     */
  +    protected boolean suspended = false;
  +
  +
  +    /**
        * The PrintWriter that has been returned by
        * <code>getWriter()</code>, if any.
        */
  @@ -220,6 +233,26 @@
   
   
       /**
  +     * Set the application commit flag.
  +     */
  +    public void setAppCommitted(boolean appCommitted) {
  +
  +        this.appCommitted = appCommitted;
  +
  +    }
  +
  +
  +    /**
  +     * Application commit flag accessor.
  +     */
  +    public boolean isAppCommitted() {
  +
  +        return (this.appCommitted || this.committed);
  +
  +    }
  +
  +
  +    /**
        * Return the Connector through which this Response will be transmitted.
        */
       public Connector getConnector() {
  @@ -365,6 +398,28 @@
   
   
       /**
  +     * Set the suspended flag.
  +     */
  +    public void setSuspended(boolean suspended) {
  +
  +        this.suspended = suspended;
  +        if (stream != null)
  +            ((ResponseStream) stream).setSuspended(suspended);
  +
  +    }
  +
  +
  +    /**
  +     * Suspended flag accessor.
  +     */
  +    public boolean isSuspended() {
  +
  +        return (this.suspended);
  +
  +    }
  +
  +
  +    /**
        * Set the error flag.
        */
       public void setError() {
  @@ -504,6 +559,8 @@
           // buffer is NOT reset when recycling
           bufferCount = 0;
           committed = false;
  +        appCommitted = false;
  +        suspended = false;
           // connector is NOT reset when recycling
           contentCount = 0;
           contentLength = -1;
  @@ -533,6 +590,10 @@
        */
       public void write(int b) throws IOException {
   
  +        if (suspended)
  +            throw new IOException
  +                (sm.getString("responseBase.write.suspended"));
  +
           if (bufferCount >= buffer.length)
               flushBuffer();
           buffer[bufferCount++] = (byte) b;
  @@ -551,6 +612,10 @@
        */
       public void write(byte b[]) throws IOException {
   
  +        if (suspended)
  +            throw new IOException
  +                (sm.getString("responseBase.write.suspended"));
  +
           write(b, 0, b.length);
   
       }
  @@ -568,6 +633,10 @@
        * @exception IOException if an input/output error occurs
        */
       public void write(byte b[], int off, int len) throws IOException {
  +
  +        if (suspended)
  +            throw new IOException
  +                (sm.getString("responseBase.write.suspended"));
   
           // If the whole thing fits in the buffer, just put it there
           if (len == 0)
  
  
  
  1.2.2.1   +81 -5     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseFacade.java
  
  Index: ResponseFacade.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseFacade.java,v
  retrieving revision 1.2
  retrieving revision 1.2.2.1
  diff -u -r1.2 -r1.2.2.1
  --- ResponseFacade.java       2001/07/22 20:25:06     1.2
  +++ ResponseFacade.java       2001/10/04 19:26:57     1.2.2.1
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseFacade.java,v
 1.2 2001/07/22 20:25:06 pier Exp $
  - * $Revision: 1.2 $
  - * $Date: 2001/07/22 20:25:06 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseFacade.java,v
 1.2.2.1 2001/10/04 19:26:57 remm Exp $
  + * $Revision: 1.2.2.1 $
  + * $Date: 2001/10/04 19:26:57 $
    *
    * ====================================================================
    *
  @@ -80,7 +80,7 @@
    * object.  All methods are delegated to the wrapped response.
    *
    * @author Remy Maucherat
  - * @version $Revision: 1.2 $ $Date: 2001/07/22 20:25:06 $
  + * @version $Revision: 1.2.2.1 $ $Date: 2001/10/04 19:26:57 $
    */
   
   public class ResponseFacade implements ServletResponse {
  @@ -95,6 +95,7 @@
        * @param response The response to be wrapped
        */
       public ResponseFacade(Response response) {
  +        this.resp = response;
           this.response = (ServletResponse) response;
       }
   
  @@ -108,6 +109,29 @@
       protected ServletResponse response = null;
   
   
  +    /**
  +     * The wrapped response.
  +     */
  +    protected Response resp = null;
  +
  +
  +    // --------------------------------------------------------- Public Methods
  +
  +
  +    public void finish() {
  +
  +        resp.setSuspended(true);
  +
  +    }
  +
  +
  +    public boolean isFinished() {
  +
  +        return resp.isSuspended();
  +
  +    }
  +
  +
       // ------------------------------------------------ ServletResponse Methods
   
   
  @@ -118,28 +142,56 @@
   
       public ServletOutputStream getOutputStream()
           throws IOException {
  +
  +        if (isFinished())
  +            throw new IllegalStateException
  +                (/*sm.getString("responseFacade.finished")*/);
  +
           return response.getOutputStream();
  +
       }
   
   
       public PrintWriter getWriter()
           throws IOException {
  +
  +        if (isFinished())
  +            throw new IllegalStateException
  +                (/*sm.getString("responseFacade.finished")*/);
  +
           return response.getWriter();
  +
       }
   
   
       public void setContentLength(int len) {
  +
  +        if (isCommitted())
  +            return;
  +
           response.setContentLength(len);
  +
       }
   
   
       public void setContentType(String type) {
  +
  +        if (isCommitted())
  +            return;
  +
           response.setContentType(type);
  +
       }
   
   
       public void setBufferSize(int size) {
  +
  +        if (isCommitted())
  +            throw new IllegalStateException
  +                (/*sm.getString("responseBase.reset.ise")*/);
  +
           response.setBufferSize(size);
  +
       }
   
   
  @@ -150,26 +202,50 @@
   
       public void flushBuffer()
           throws IOException {
  +
  +        if (isFinished())
  +            throw new IllegalStateException
  +                (/*sm.getString("responseFacade.finished")*/);
  +
  +        resp.setAppCommitted(true);
  +
           response.flushBuffer();
  +
       }
   
   
       public void resetBuffer() {
  +
  +        if (isCommitted())
  +            throw new IllegalStateException
  +                (/*sm.getString("responseBase.reset.ise")*/);
  +
           response.resetBuffer();
  +
       }
   
   
       public boolean isCommitted() {
  -        return response.isCommitted();
  +        return (resp.isAppCommitted());
       }
   
   
       public void reset() {
  +
  +        if (isCommitted())
  +            throw new IllegalStateException
  +                (/*sm.getString("responseBase.reset.ise")*/);
  +
           response.reset();
  +
       }
   
   
       public void setLocale(Locale loc) {
  +
  +        if (isCommitted())
  +            return;
  +
           response.setLocale(loc);
       }
   
  
  
  
  1.4.2.1   +48 -4     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseStream.java
  
  Index: ResponseStream.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseStream.java,v
  retrieving revision 1.4
  retrieving revision 1.4.2.1
  diff -u -r1.4 -r1.4.2.1
  --- ResponseStream.java       2001/07/22 20:25:06     1.4
  +++ ResponseStream.java       2001/10/04 19:26:57     1.4.2.1
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseStream.java,v
 1.4 2001/07/22 20:25:06 pier Exp $
  - * $Revision: 1.4 $
  - * $Date: 2001/07/22 20:25:06 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseStream.java,v
 1.4.2.1 2001/10/04 19:26:57 remm Exp $
  + * $Revision: 1.4.2.1 $
  + * $Date: 2001/10/04 19:26:57 $
    *
    * ====================================================================
    *
  @@ -79,7 +79,7 @@
    * enforce not writing more than that many bytes on the underlying stream.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.4 $ $Date: 2001/07/22 20:25:06 $
  + * @version $Revision: 1.4.2.1 $ $Date: 2001/10/04 19:26:57 $
    */
   
   public class ResponseStream
  @@ -102,6 +102,7 @@
           count = 0;
           this.response = response;
           this.stream = response.getStream();
  +        this.suspended = response.isSuspended();
   
       }
   
  @@ -153,6 +154,12 @@
       protected OutputStream stream = null;
   
   
  +    /**
  +     * Has this response output been suspended?
  +     */
  +    protected boolean suspended = false;
  +
  +
       // ------------------------------------------------------------- Properties
   
   
  @@ -178,6 +185,26 @@
       }
   
   
  +    /**
  +     * Set the suspended flag.
  +     */
  +    void setSuspended(boolean suspended) {
  +
  +        this.suspended = suspended;
  +
  +    }
  +
  +
  +    /**
  +     * Suspended flag accessor.
  +     */
  +    boolean isSuspended() {
  +
  +        return (this.suspended);
  +
  +    }
  +
  +
       // --------------------------------------------------------- Public Methods
   
   
  @@ -187,6 +214,10 @@
        */
       public void close() throws IOException {
   
  +        if (suspended)
  +            throw new IOException
  +                (sm.getString("responseStream.suspended"));
  +
           if (closed)
               throw new IOException(sm.getString("responseStream.close.closed"));
   
  @@ -202,6 +233,10 @@
        */
       public void flush() throws IOException {
   
  +        if (suspended)
  +            throw new IOException
  +                (sm.getString("responseStream.suspended"));
  +
           if (closed)
               throw new IOException(sm.getString("responseStream.flush.closed"));
   
  @@ -220,6 +255,9 @@
        */
       public void write(int b) throws IOException {
   
  +        if (suspended)
  +            return;
  +
           if (closed)
               throw new IOException(sm.getString("responseStream.write.closed"));
   
  @@ -242,6 +280,9 @@
        */
       public void write(byte b[]) throws IOException {
   
  +        if (suspended)
  +            return;
  +
           write(b, 0, b.length);
   
       }
  @@ -258,6 +299,9 @@
        * @exception IOException if an input/output error occurs
        */
       public void write(byte b[], int off, int len) throws IOException {
  +
  +        if (suspended)
  +            return;
   
           if (closed)
               throw new IOException(sm.getString("responseStream.write.closed"));
  
  
  


Reply via email to