huashan8 发表于 2017-1-25 10:25:35

Tomcat配置gzip压缩

  有时因为数据量大(或者图片比较大)需要启用压缩,这里就记录下如何开启Tomcat的gzip压缩
  1.配置server.xml文件
  找到包含protocol="HTTP/1.1"这个属性值的connector,添加下面的配置:
  compression="on" compressionMinSize="50" noCompressionUserAgents="gozilla, traviata" compressableMimeType="application/json,text/html,text/xml,text/javascript,text/css,text/plain"
  其中:
  compressableMimeType表示启用压缩的mimetype,noCompressionUserAgents表示哪些浏览器不使用gzip压缩
  2.应用中输出数据

response.setContentType("application/json;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.print(......);
writer.flush();
writer.close();

   这里主要是要设置Content-Type这个头,应该在之前配置的compressableMimeType列表中
  3.获取gzip压缩后的数据
  采用HttpClient方式模拟http请求,想要获取的是gzip压缩后的数据,那么应该在accept-encoding请求头的值中添加gzip类型

public static void main(String[] args) throws Exception {
HttpMethod method = new GetMethod("http://localhost/web/user");
method.setRequestHeader(new Header("accept-encoding","gzip,deflate,sdch"));
HttpClient client = new HttpClient();
client.executeMethod(method);
String response = method.getResponseBodyAsString();
System.out.println("---------------------------------------------------------");
System.out.println(response);
System.out.println("---------------------------------------------------------");
String res = getUngzipString(method);
System.out.println("---------------------------------------------------------");
System.out.println(res);
System.out.println("---------------------------------------------------------");
System.out.println();
}
public static String getUngzipString(HttpMethod method) throws Exception{
InputStream is = method.getResponseBodyAsStream();
GZIPInputStream gzin = new GZIPInputStream(is);
InputStreamReader isr = new InputStreamReader(gzin, "UTF-8");   
java.io.BufferedReader br = new java.io.BufferedReader(isr);
StringBuffer sb = new StringBuffer();
String tempbf;
while ((tempbf = br.readLine()) != null) {
sb.append(tempbf);
}
isr.close();
gzin.close();
System.out.println(method.getResponseHeader("Content-Type")+"-->"+method.getResponseHeader("Content-Type").getValue());
return sb.toString();
}
   如上段代码是测试读取gzip的2个方法,第一个打印System.out.println(response)输出的内容是乱码,第二个打印System.out.println(res)输出的是gzip解压后的内容
页: [1]
查看完整版本: Tomcat配置gzip压缩