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解压后的内容

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值