当我们打开一个网页之后,查看源代码会发现,很多网页会有空行,如果剔除空行的话,源代码的体积会减少一下。下面是实现方法。
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletResponse; import com.wappers.HtmlWapper; @WebFilter(filterName="htmlFilter",urlPatterns="/index.jsp") public class HtmlFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("------------------------>进入filter......"); //使用自定义的响应包装器来包装原始的ServletResponse HtmlWapper wapper=new HtmlWapper((HttpServletResponse) response); chain.doFilter(request, wapper); String s=wapper.getResult(); s=s.replaceAll("(?<=\>)(?:\s* ? ?)(?=\<)",""); PrintWriter out=response.getWriter(); out.write(s); out.flush(); } @Override public void init(FilterConfig arg0) throws ServletException { } }
import java.io.CharArrayWriter; import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; public class HtmlWapper extends HttpServletResponseWrapper{ private PrintWriter printWriter; private CharArrayWriter charWriter; // private CompressedStream compressedOut; public HtmlWapper(HttpServletResponse response) { super(response); // TODO Auto-generated constructor stub charWriter=new CharArrayWriter(); printWriter=new PrintWriter(charWriter); } public String getResult(){ return charWriter.toString(); } @Override public PrintWriter getWriter(){ return printWriter; } }
效果对比,下面分别是压缩前,压缩后的情况:
打印网页指定位置:
var newWindow=window.open("打印窗口","_blank"); // 假设要打印的区域 包在 div 中,id 为:data_div_id var obj = document.getElementById("data_div_id"); var docStr = obj.innerHTML; newWindow.document.write(docStr); newWindow.document.close(); newWindow.print();