package com.ofrick.filters; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.regex.*; public class MinifyFilter implements Filter { private Pattern regex = null; // This method is called once on server startup public void init(FilterConfig filterConfig) { regex = Pattern.compile("^\\s*$\\n|\\t", Pattern.MULTILINE); } // This method is called for every request and needs to be thread safe. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, javax.servlet.ServletException { HttpServletResponse resp = (HttpServletResponse) response; ResponseWrapper wrapper = new ResponseWrapper(resp); chain.doFilter(request, wrapper); String html = wrapper.toString(); html = regex.matcher(html).replaceAll(""); //html = multipleSpaces.matcher(html).replaceAll(" "); resp.setContentLength(html.getBytes().length); PrintWriter out = resp.getWriter(); out.write(html); out.flush(); out.close(); } // This method is called once on server shut down public void destroy() { // } static class ResponseWrapper extends HttpServletResponseWrapper { private CharArrayWriter output; public ResponseWrapper(HttpServletResponse response) { super(response); this.output = new CharArrayWriter(); } public String toString() { return output.toString(); } public PrintWriter getWriter() { return new PrintWriter(output); } } }