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) {
}
}