Web Compression Filters
Package mytest.gzipfilter;
Import Java.io.ByteArrayOutputStream;
Import java.io.IOException;
Import Java.io.OutputStreamWriter;
Import Java.io.PrintWriter;
Import Java.util.zip.GZIPOutputStream;
Import Javax.servlet.Filter;
Import Javax.servlet.FilterChain;
Import Javax.servlet.FilterConfig;
Import javax.servlet.ServletException;
Import Javax.servlet.ServletOutputStream;
Import Javax.servlet.ServletRequest;
Import Javax.servlet.ServletResponse;
Import Javax.servlet.http.HttpServletRequest;
Import Javax.servlet.http.HttpServletResponse;
Import Javax.servlet.http.HttpServletResponseWrapper;
/**
* Servlet Filter Implementation class Gzipfilter
*/
public class Gzipfilter implements Filter {
/**
* Default constructor.
*/
Public Gzipfilter () {
//TODO auto-generated constructor stub
}
/**
* @see Filter#destroy ()
*/
public void Destroy () {
//TODO auto-generated method stub
}
/**
* @see filter#dofilter (servletrequest, Servletresponse, Filterchain)
*/
public void DoFilter (ServletRequest req, servletresponse Res,
Filterchain chain) throws IOException, Servletexception {
//TODO auto-generated method stub
//Place your code here
httpservletrequest request = (httpservletrequest) req;
HttpServletResponse response = (httpservletresponse) res;
bufferhttpresponse bufferhttpresponse = new Bufferhttpresponse (response);
//Pass the request along the filter chain
chain.dofilter (Request, bufferhttpresponse);
byte out[] = Bufferhttpresponse.getbuffer ();
Bytearrayoutputstream bout = new Bytearrayoutputstream ();
Gzipoutputstream gout = new Gzipoutputstream (bout);
Gout.write (out);
gout.close ();
byte gzip[] = Bout.tobytearray ();
response.setheader ("content-encoding", "gzip");
response.setcontentlength (gzip.length);
Response.getoutputstream (). write (gzip);
}
/**
* @see filter#init (filterconfig)
*/
public void init (Filterconfig fconfig) throws Servletexception {
//TODO auto-generated method stub
}
}
Class Bufferhttpresponse extends Httpservletresponsewrapper {
Private HttpServletResponse response;
private Bytearrayoutputstream bout = new Bytearrayoutputstream ();
private PrintWriter pw;
Public Bufferhttpresponse (httpservletresponse response) {
Super (response);
this.response = response;
}
@Override
public Servletoutputstream Getoutputstream () throws IOException {
return new Myservletoutputstream (bout);
}
@Override
public PrintWriter getwriter () throws IOException {
pw = new PrintWriter (New OutputStreamWriter (Bout,this.response.getcharacterencoding ()));
return PW;
}
public byte[] GetBuffer () {
try {
if (PW = null) {
pw.close ();
}
if (bout! = null)
Bout.flush ();
return Bout.tobytearray ();
} catch (Exception e) {
throw new RuntimeException (e);
}
}
}
Class Myservletoutputstream extends Servletoutputstream {
private Bytearrayoutputstream bout;
public Myservletoutputstream (Bytearrayoutputstream bout) {
this.bout = bout;
}
@Override
public void write (int arg0) throws IOException {
}
}
Configuring compressed content in Web. xml
<filter>
<display-name>GzipFilter</display-name>
<filter-name>GzipFilter</filter-name>
<filter-class>mytest.gzipfilter.GzipFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>/*.jsp</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>/*.css</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>/*.js</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>/*.html</url-pattern>
</filter-mapping>
This article from "No Worry" blog, declined reproduced!
Web Compression Filters