1、简单的处理方法
//在servlet中
StringBuffer sb = new StringBuffer();
for(int i=1;i<3000;i++){
sb.append("nuist");
}
System.out.println("压缩前的数据大小:"+sb.toString().getBytes().length);
// response.getWriter().write(sb.toString());
// 使用gzip进行压缩
//创建一个临时缓存容器
ByteArrayOutputStream buf = new ByteArrayOutputStream();
// 2)创建GZIPOutputStream
GZIPOutputStream gzip = new GZIPOutputStream(buf);
//3)进行压缩
gzip.write(sb.toString().getBytes());
//4)调用结束方法 把缓存内容刷新
gzip.finish();
//5)得到刷新的内容
byte[] result = buf.toByteArray();
System.out.println("压缩后的数据大小:"+result.toString().getBytes().length);
//6)设置浏览器的请求头
response.setHeader("content-encoding", "gzip");
response.getOutputStream().write(result);
压缩前的数据大小:14995
压缩后的数据大小:11
可见压缩效果是很显著的
2、通过过滤器批量压缩
//servlet
StringBuffer sb = new StringBuffer();
for(int i=1;i<3000;i++){
sb.append("北京");
}
response.getWriter().write(sb.toString());
//过滤器类
public class GZIPFilter implements Filter{
@Override
public void doFilter(ServletRequest request, ServletResponse response , FilterChain chain)
throws IOException, ServletException {
//1)过滤请求
//由于response 直接将内容输出到浏览器 而没有缓存功能,所以重写包装一下getWriter()函数
//定义一个char数组用来暂存数据
MyHttpResponse myResponse = new MyHttpResponse((HttpServletResponse) response);
chain.doFilter(request, myResponse);
//3)响应请求
//得到压缩前的内容
char[] content = myResponse.getCharArray();
System.out.println(new String(content).getBytes().length);
//压缩
ByteArrayOutputStream buf = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(buf);
gzip.write(new String(content).getBytes());
gzip.finish();
//输出
byte[] result = buf.toByteArray();
System.out.println(new String(result).getBytes().length);
myResponse.setHeader("content-encoding", "gzip");
myResponse.getOutputStream().write(result);
}
}
class MyHttpResponse extends HttpServletResponseWrapper{
private HttpServletResponse response;
//用来暂存数据
private CharArrayWriter charArray = new CharArrayWriter();
public MyHttpResponse(HttpServletResponse response) {
super(response);
this.response = response;
}
public char[] getCharArray() {
return charArray.toCharArray();
}
@Override
public PrintWriter getWriter() throws IOException {
return new PrintWriter(charArray);
}
}
web.xml里面要自己配置一下过滤器
嗯嗯