配置Tomcat根目录下/conf/server.xml文件:
1) compression="on" 打开压缩功能2) compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB3) noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩 4) compressableMimeType="text/html,text/xml" 压缩类型
一旦启用了这个压缩功能后,怎么来测试压缩是否有效呢?首先Tomcat是根据浏览器请求头中的accept-encoding来判断浏览器是否支持压缩功能,如果这个值包含有gzip,就表明浏览器支持gzip压缩内容的浏览,下面分别有二段代码进行tomcat内容是否压缩过的测试程序。
package com.triman.base.util;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.zip.GZIPInputStream;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.methods.GetMethod;public class TestTomcat { public static void main(String [] args) throws HttpException, IOException{ HttpClient http = new HttpClient(); GetMethod get = new GetMethod("http://localhost:8080/sh_jasr/login.jsp"); try{ get.addRequestHeader("accept-encoding", "gzip,deflate"); get.addRequestHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toolbar; Maxthon 2.0)"); int er = http.executeMethod(get); if(er==200){ //第一种方案,采用读String的方式进行读取;// System.out.println(get.getResponseContentLength());// String html = get.getResponseBodyAsString();// System.out.println(html);// System.out.println(html.getBytes().length); //第二种方案,采用stream进行读,主要针对gzip解压; System.out.println("采用stream进行读,主要针对gzip解压;"); InputStream in=get.getResponseBodyAsStream(); // 对返回的stream流数据进行gzip解密; GZIPInputStream gzin = new GZIPInputStream(in); BufferedReader bin = new BufferedReader(new InputStreamReader(gzin,"UTF-8")); String s = null; while ((s = bin.readLine()) != null) { System.out.println(s); } bin.close(); System.out.println("采用stream进行读,主要针对gzip解压;"); } }finally{ get.releaseConnection(); } } public static void main1(String[] args) { try { URL url = new URL("http://localhost:8080/sh_jasr/login.jsp"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("Accept-Encoding", "gzip,deflate");// 如果这里不设置,返回的就不是gzip的数据了,也就不用解压缩了 conn.connect(); InputStream in = conn.getInputStream(); // BufferedReader bin = new BufferedReader(new InputStreamReader(in,"UTF-8")); // 对返回的stream流数据进行gzip解压; GZIPInputStream gzin = new GZIPInputStream(in); BufferedReader bin = new BufferedReader(new InputStreamReader(gzin,"UTF-8")); String s = null; while ((s = bin.readLine()) != null) { System.out.println(s); } bin.close(); } catch (Exception e) { e.printStackTrace(); } }}
执行这个测试程序,看看它所输出的是什么内容,如果输出的是一些乱码,以及打印内容的长度远小于实际的长度,那么恭喜你,你的配置生效了,你会发现你网站的浏览速度比以前快多了。
注:其实是 tomcat 6 把注释整個拿掉,让大家以为Tomcat对Gzip不再支持,其实不然,大家可以看一下就知道,Tomcat依然支持这个功能。
原文地址: