Port fix bug 39572. Improvements to CompressionFilter provided by Eric Hedström....
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Sat, 27 Jan 2007 23:07:51 +0000 (23:07 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Sat, 27 Jan 2007 23:07:51 +0000 (23:07 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@500668 13f79535-47bb-0310-9956-ffa450edef68

webapps/docs/changelog.xml
webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilterTestServlet.java
webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.java
webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.java

index 7147916..5fcab1f 100644 (file)
       <update>
         Update all webapps to use the servlet 2.5 xsd. (markt)
       </update>
+      <fix>
+        <bug>39572</bug>: Improvements to CompressionFilter example provided by
+        Eric Hedström. (markt)
+      </fix>
     </changelog>
   </subsection>
 </section>
index a4152b8..71ea631 100644 (file)
@@ -18,7 +18,6 @@
 package compressionFilters;
 
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.util.Enumeration;
 import javax.servlet.*;
 import javax.servlet.http.*;
index ec2ecfb..1ec0215 100644 (file)
@@ -81,7 +81,7 @@ public class CompressionResponseStream
     /**
      * The underlying gzip output stream to which we should write data.
      */
-    protected GZIPOutputStream gzipstream = null;
+    protected OutputStream gzipstream = null;
 
     /**
      * Has this stream been closed?
@@ -295,8 +295,14 @@ public class CompressionResponseStream
             if (debug > 1) {
                 System.out.println("new GZIPOutputStream");
             }
-            response.addHeader("Content-Encoding", "gzip");
-            gzipstream = new GZIPOutputStream(output);
+            if (response.isCommitted()) {
+                if (debug > 1)
+                    System.out.print("Response already committed. Using original output stream");
+                gzipstream = output;
+            } else {
+                response.addHeader("Content-Encoding", "gzip");
+                gzipstream = new GZIPOutputStream(output);
+            }
         }
         gzipstream.write(b, off, len);
 
index 23dd9fc..274922d 100644 (file)
 package compressionFilters;
 
 import java.io.IOException;
-import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
-import java.util.Locale;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.ServletException;
 import javax.servlet.ServletOutputStream;
-import javax.servlet.ServletResponse;
-import javax.servlet.ServletResponseWrapper;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponseWrapper;
 
@@ -249,29 +242,4 @@ public class CompressionServletResponseWrapper extends HttpServletResponseWrappe
     public void setContentLength(int length) {
     }
 
-
-    /**
-     * Returns character from content type. This method was taken from tomcat.
-     * @author rajo
-     */
-    private static String getCharsetFromContentType(String type) {
-
-        if (type == null) {
-            return null;
-        }
-        int semi = type.indexOf(";");
-        if (semi == -1) {
-            return null;
-        }
-        String afterSemi = type.substring(semi + 1);
-        int charsetLocation = afterSemi.indexOf("charset=");
-        if(charsetLocation == -1) {
-            return null;
-        } else {
-            String afterCharset = afterSemi.substring(charsetLocation + 8);
-            String encoding = afterCharset.trim();
-            return encoding;
-        }
-    }
-
 }