Sunday 12 June 2011

Compress Filter

A simple Java servlet Filter to compress the returned pages

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
PrintWriter out = response.getWriter();

// Create a wrapper to catch the output of the next Filter/Servlet in
// the chain
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(
(HttpServletResponse) response) {
private CharArrayWriter output = new CharArrayWriter();;

public String toString() {
return output.toString();
}

public PrintWriter getWriter() {
return new PrintWriter(output);
}
};
// pass the request along the filter chain
chain.doFilter(request, wrapper);

String html = wrapper.toString();

HtmlCompressor compressor = new HtmlCompressor();
compressor.setCompressJavaScript(true);
compressor.setRemoveComments(false);
compressor.setSimpleDoctype(true);

String compressedHtml;
try {
compressedHtml = compressor.compress(html);
CharArrayWriter caw = new CharArrayWriter();
caw.write(compressedHtml);
response.setContentLength(caw.toString().getBytes().length);
out.write(caw.toString());
out.close();
} catch (Exception e) {
logger.error(e.getMessage());
out.write(html);
out.close();
}
}