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/09/07 01:05:08 UTC

cvs commit: jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters CompressionFilter.java CompressionResponseStream.java CompressionServletResponseWrapper.java

remm        01/09/06 16:05:08

  Modified:    webapps/examples/WEB-INF/classes/compressionFilters
                        CompressionFilter.java
                        CompressionResponseStream.java
                        CompressionServletResponseWrapper.java
  Log:
  - Fixes various issues with the compression filter, including:
    - don't set content length (fixes problems with static content)
    - close the writer retrieved with getWriter()
    - remove some unnecessary flushes
  - The filter could still be improved in a lot of ways, including:
    - being smarter with the content length (it could be set when not in
      compression mode)
    - only compress text data (I don't think that is implemented at the moment)
  
  Revision  Changes    Path
  1.5       +9 -5      jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.java
  
  Index: CompressionFilter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- CompressionFilter.java	2001/09/06 04:18:53	1.4
  +++ CompressionFilter.java	2001/09/06 23:05:08	1.5
  @@ -1,8 +1,8 @@
   /*
    * CompressionFilter.java
  - * $Header: /home/cvs/jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.java,v 1.4 2001/09/06 04:18:53 amyroh Exp $
  - * $Revision: 1.4 $
  - * $Date: 2001/09/06 04:18:53 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.java,v 1.5 2001/09/06 23:05:08 remm Exp $
  + * $Revision: 1.5 $
  + * $Date: 2001/09/06 23:05:08 $
    *
    * ====================================================================
    *
  @@ -80,7 +80,7 @@
    * the ServletResponse if it is bigger than a threshold.
    *
    * @author Amy Roh
  - * @version $Revision: 1.4 $, $Date: 2001/09/06 04:18:53 $
  + * @version $Revision: 1.5 $, $Date: 2001/09/06 23:05:08 $
    */
   
   public class CompressionFilter implements Filter{
  @@ -194,7 +194,11 @@
                   if (debug > 0) {
                       System.out.println("doFilter gets called with compression");
                   }
  -                chain.doFilter(request, wrappedResponse);
  +                try {
  +                    chain.doFilter(request, wrappedResponse);
  +                } finally {
  +                    wrappedResponse.finishResponse();
  +                }
                   return;
               }
           }
  
  
  
  1.4       +17 -20    jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.java
  
  Index: CompressionResponseStream.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CompressionResponseStream.java	2001/09/06 04:18:54	1.3
  +++ CompressionResponseStream.java	2001/09/06 23:05:08	1.4
  @@ -1,8 +1,8 @@
   /*
    * CompressionResponseStream.java
  - * $Header: /home/cvs/jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.java,v 1.3 2001/09/06 04:18:54 amyroh Exp $
  - * $Revision: 1.3 $
  - * $Date: 2001/09/06 04:18:54 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.java,v 1.4 2001/09/06 23:05:08 remm Exp $
  + * $Revision: 1.4 $
  + * $Date: 2001/09/06 23:05:08 $
    *
    * ====================================================================
    *
  @@ -76,7 +76,7 @@
    * the CompressionServletResponseWrapper implementation.
    *
    * @author Amy Roh
  - * @version $Revision: 1.3 $, $Date: 2001/09/06 04:18:54 $
  + * @version $Revision: 1.4 $, $Date: 2001/09/06 23:05:08 $
    */
   
   public class CompressionResponseStream
  @@ -177,17 +177,22 @@
        */
       public void close() throws IOException {
   
  +        //System.out.println("close() @ CompressionResponseStream");
           if (closed)
  -	        throw new IOException("This output stream has already been closed");
  +            throw new IOException("This output stream has already been closed");
   
  -        flush();
  -
  -        if (gzipstream!=null) {
  +        if (gzipstream != null) {
  +            flushToGZip();
               gzipstream.close();
  +        } else {
  +            if (bufferCount > 0) {
  +                output.write(buffer, 0, bufferCount);
  +                bufferCount = 0;
  +            }
           }
   
           output.close();
  -	    closed = true;
  +        closed = true;
   
       }
   
  @@ -203,12 +208,6 @@
               throw new IOException("Cannot flush a closed output stream");
           }
   
  -        if (bufferCount > 0) {
  -            //System.out.println("writing to original stream");
  -            output.write(buffer, 0, bufferCount);
  -            bufferCount = 0;
  -        }
  -
           if (gzipstream!=null) {
               gzipstream.flush();
           }
  @@ -247,8 +246,8 @@
           if (compressionThresholdReached) {
               writeToGZip(b);
           } else {
  -	        buffer[bufferCount++] = (byte) b;
  -	        count++;
  +            buffer[bufferCount++] = (byte) b;
  +            count++;
           }
   
       }
  @@ -267,7 +266,6 @@
           //System.out.println("writeToGZip (int b) compressing");
           if (gzipstream == null) {
               gzipstream = new GZIPOutputStream(output);
  -            flushToGZip();
               response.addHeader("Content-Encoding", "gzip");
           }
           gzipstream.write(b);
  @@ -312,7 +310,7 @@
               bufferCount += len;
               count += len;
               return;
  -	    }
  +        }
   
           // buffer full, start writing to gzipstream
   
  @@ -326,7 +324,6 @@
           //System.out.println("writeToGZip 2 compressing");
           if (gzipstream == null) {
               gzipstream = new GZIPOutputStream(output);
  -            flushToGZip();
               response.addHeader("Content-Encoding", "gzip");
           }
           gzipstream.write(b, off, len);
  
  
  
  1.4       +23 -4     jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.java
  
  Index: CompressionServletResponseWrapper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CompressionServletResponseWrapper.java	2001/09/06 04:18:54	1.3
  +++ CompressionServletResponseWrapper.java	2001/09/06 23:05:08	1.4
  @@ -1,8 +1,8 @@
   /*
    * CompressionServletResponseWrapper.java
  - * $Header: /home/cvs/jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.java,v 1.3 2001/09/06 04:18:54 amyroh Exp $
  - * $Revision: 1.3 $
  - * $Date: 2001/09/06 04:18:54 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.java,v 1.4 2001/09/06 23:05:08 remm Exp $
  + * $Revision: 1.4 $
  + * $Date: 2001/09/06 23:05:08 $
    *
    * ====================================================================
    *
  @@ -83,7 +83,7 @@
    * the CompressionServletResponseStream implementation..
    *
    * @author Amy Roh
  - * @version $Revision: 1.3 $, $Date: 2001/09/06 04:18:54 $
  + * @version $Revision: 1.4 $, $Date: 2001/09/06 23:05:08 $
    */
   
   public class CompressionServletResponseWrapper extends HttpServletResponseWrapper {
  @@ -162,6 +162,21 @@
       }
   
   
  +    /**
  +     * Finish a response.
  +     */
  +    public void finishResponse() {
  +        try {
  +            if (writer != null) {
  +                writer.close();
  +            } else {
  +                if (stream != null)
  +                    stream.close();
  +            }
  +        } catch (IOException e) {
  +        }
  +    }
  +
   
       // ------------------------------------------------ ServletResponse Methods
   
  @@ -219,6 +234,10 @@
           writer = new PrintWriter(stream);
           return (writer);
   
  +    }
  +
  +
  +    public void setContentLength(int length) {
       }
   
   }