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

 

你可能感兴趣的:(tomcat)