public class GZIPFilter extends GenericFilter
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.
ConfigurationGZIPFilter
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.
oncePerRequest
Constructor and Description |
---|
GZIPFilter() |
Modifier and Type | Method and Description |
---|---|
protected void |
doFilterImpl(javax.servlet.ServletRequest pRequest,
javax.servlet.ServletResponse pResponse,
javax.servlet.FilterChain pChain)
Invoked once, or each time a request/response pair is passed through the
chain, depending on the
GenericFilter.oncePerRequest member variable. |
destroy, doFilter, getFilterConfig, getFilterName, getInitParameter, getInitParameterNames, getServletContext, init, init, log, log, setFilterConfig, setOncePerRequest
protected void doFilterImpl(javax.servlet.ServletRequest pRequest, javax.servlet.ServletResponse pResponse, javax.servlet.FilterChain pChain) throws IOException, javax.servlet.ServletException
GenericFilter
GenericFilter.oncePerRequest
member variable.doFilterImpl
in class GenericFilter
pRequest
- the servlet requestpResponse
- the servlet responsepChain
- the filter chainIOException
- if an I/O error occursjavax.servlet.ServletException
- if an exception occurs during the filter processGenericFilter.oncePerRequest
,
doFilter
,
Filter.doFilter
Copyright © 2017. All rights reserved.