Class GZIPFilter

  • All Implemented Interfaces:
    java.io.Serializable, javax.servlet.Filter, javax.servlet.FilterConfig

    @Deprecated
    public class GZIPFilter
    extends GenericFilter
    Deprecated.
    A filter to reduce the output size of web resources.

    The HTTP protocol supports compression of the content to reduce network bandwidth. The important headers involved, are the Accept-Encoding request header, and the Content-Encoding response header. This feature can be used to further reduce the number of bytes transferred over the network, at the cost of some extra processing time at both endpoints. Most modern browsers supports compression in GZIP format, which is fairly efficient in cost/compression ratio.

    The filter tests for the presence of an Accept-Encoding header with a value of "gzip" (several different encoding header values are possible in one header). If not present, the filter simply passes the request/response pair through, leaving it untouched. If present, the Content-Encoding header is set, with the value "gzip", and the response is wrapped. The response output stream is wrapped in a GZIPOutputStream which performs the GZIP encoding. For efficiency, the filter does not buffer the response, but writes through the gzipped output stream.

    Configuration
    To use GZIPFilter in your web-application, you simply need to add it to your web descriptor (web.xml). If using a servlet container that supports the Servlet 2.4 spec, the new dispatcher element should be used, and set to REQUEST/FORWARD, to make sure the filter is invoked only once for requests. If using an older web descriptor, set the init-param "once-per-request" to "true" (this will have the same effect, but might perform slightly worse than the 2.4 version). Please see the examples below. Servlet 2.4 version, filter section:


     <!-- GZIP Filter Configuration -->
     <filter>
          <filter-name>gzip</filter-name>
          <filter-class>com.twelvemonkeys.servlet.GZIPFilter</filter-class>
     </filter>
     
    Filter-mapping section:
     <!-- GZIP Filter Mapping -->
     <filter-mapping>
          <filter-name>gzip</filter-name>
          <url-pattern>*.html</url-pattern>
          <dispatcher>REQUEST</dispatcher>
          <dispatcher>FORWARD</dispatcher>
     </filter-mapping>
     <filter-mapping>
          <filter-name>gzip</filter-name>
          <url-pattern>*.jsp< /url-pattern>
          <dispatcher>REQUEST</dispatcher>
          <dispatcher>FORWARD</dispatcher>
     </filter-mapping>
     

    Based on ideas and code found in the ONJava article Two Servlet Filters Every Web Application Should Have by Jayson Falkner.

    Version:
    $Id: GZIPFilter.java#1 $
    Author:
    Jayson Falkner, Harald Kuhr, last modified by $Author: haku $
    See Also:
    Serialized Form
    • Constructor Detail

      • GZIPFilter

        public GZIPFilter()
        Deprecated.
    • Method Detail

      • doFilterImpl

        protected void doFilterImpl​(javax.servlet.ServletRequest pRequest,
                                    javax.servlet.ServletResponse pResponse,
                                    javax.servlet.FilterChain pChain)
                             throws java.io.IOException,
                                    javax.servlet.ServletException
        Deprecated.
        Description copied from class: GenericFilter
        Invoked once, or each time a request/response pair is passed through the chain, depending on the GenericFilter.oncePerRequest member variable.
        Specified by:
        doFilterImpl in class GenericFilter
        Parameters:
        pRequest - the servlet request
        pResponse - the servlet response
        pChain - the filter chain
        Throws:
        java.io.IOException - if an I/O error occurs
        javax.servlet.ServletException - if an exception occurs during the filter process
        See Also:
        GenericFilter.oncePerRequest, doFilter, Filter.doFilter