KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > webapp > filter > GZIPFilter


1 package com.blandware.atleap.webapp.filter;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5
6 import javax.servlet.Filter JavaDoc;
7 import javax.servlet.FilterChain JavaDoc;
8 import javax.servlet.FilterConfig JavaDoc;
9 import javax.servlet.ServletException JavaDoc;
10 import javax.servlet.ServletRequest JavaDoc;
11 import javax.servlet.ServletResponse JavaDoc;
12 import javax.servlet.http.HttpServletRequest JavaDoc;
13 import javax.servlet.http.HttpServletResponse JavaDoc;
14 import java.io.IOException JavaDoc;
15
16
17 /**
18  * Filter that compresses output with gzip (assuming that browser supports gzip).
19  * Code from <a HREF="http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html">
20  * http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html</a>.
21  * <p>&copy; 2003 Jayson Falkner You may freely use the code both commercially
22  * and non-commercially.
23  *
24  * @author Matt Raible <a HREF="mailto:matt@raibledesigns.com">&lt;matt@raibledesigns.com&gt;</a>
25  * @version $Revision: 1.5 $ $Date: 2005/04/03 10:06:19 $
26  * @web.filter name="compressionFilter"
27  */

28 public class GZIPFilter implements Filter JavaDoc {
29     protected transient final Log log = LogFactory.getLog(GZIPFilter.class);
30
31     public void doFilter(ServletRequest JavaDoc req, ServletResponse JavaDoc res,
32                          FilterChain JavaDoc chain)
33             throws IOException JavaDoc, ServletException JavaDoc {
34         if ( req instanceof HttpServletRequest JavaDoc ) {
35             HttpServletRequest JavaDoc request = (HttpServletRequest JavaDoc) req;
36             HttpServletResponse JavaDoc response = (HttpServletResponse JavaDoc) res;
37
38             if ( isGZIPSupported(request) ) {
39                 if ( log.isDebugEnabled() ) {
40                     log.debug("GZIP supported, compressing response");
41                 }
42
43                 GZIPResponseWrapper wrappedResponse =
44                         new GZIPResponseWrapper(response);
45
46                 chain.doFilter(req, wrappedResponse);
47                 wrappedResponse.finishResponse();
48
49                 return;
50             }
51
52             chain.doFilter(req, res);
53         }
54     }
55
56     /**
57      * Convenience method to test for GZIP cababilities
58      *
59      * @param req The current user request
60      * @return boolean indicating GZIP support
61      */

62     protected boolean isGZIPSupported(HttpServletRequest JavaDoc req) {
63         String JavaDoc browserEncodings = req.getHeader("accept-encoding");
64         boolean supported =
65                 ((browserEncodings != null) &&
66                 (browserEncodings.indexOf("gzip") != -1));
67
68         String JavaDoc userAgent = req.getHeader("user-agent");
69
70         if ( (userAgent != null) && userAgent.startsWith("httpunit") ) {
71             if ( log.isDebugEnabled() ) {
72                 log.debug("httpunit detected, disabling filter...");
73             }
74
75             return false;
76         } else {
77             return supported;
78         }
79     }
80
81     public void init(FilterConfig JavaDoc filterConfig) {
82     }
83
84     public void destroy() {
85     }
86 }
87
Popular Tags