我这里是将.java文件中使用gzip技术压缩后的数据发送到网页页面上的。
项目下index.jsp的body标签中只写了这一句:
<a href="gzip">演示gzip</a>
web.xml中写上这个(新建GzipServlet.java这样一个servlet文件时会自动添加上的,新建添加时你也可以做修改,我这里就修改了):
<servlet>
<servlet-name>GzipServlet</servlet-name>
<servlet-class>cn.hncu.img.GzipServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GzipServlet</servlet-name>
<url-pattern>/gzip</url-pattern>
</servlet-mapping>
package cn.hncu.img;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GzipServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String str="软件工程软件工程软件工程软件工程软件工程软件工程软件工程";
//上面这个被压缩字符串str要内容比较大时压缩的效果才能显现出来(像上面这么长已经能够显现出来了),因为压缩的时候会有一些其他的开销要使用存储空间
byte[] src=str.getBytes();
System.out.println("src-length:"+src.length);
//把字节数组src中的数据 压缩到 array内存流当中
ByteArrayOutputStream array=new ByteArrayOutputStream();
GZIPOutputStream gout=new GZIPOutputStream(array);
gout.write(src);
gout.close();
//从内存流array中把压缩后的数据拿出来
byte[] dest=array.toByteArray();
System.out.println("dest-lenght:"+dest.length);
response.setContentType("text/html");
response.setHeader("Content-Encoding", "gzip");//告诉浏览器,当前发送的是gzip格式的内容
//response.setContentLength(dest.length);//设置内容长度---法1
response.setHeader("Content-Length", ""+dest.length);//设置内容长度---法2
OutputStream out=response.getOutputStream();
//out.write(src);
out.write(dest);
out.flush();
out.close();
}
}
启动你的服务器,到浏览器上去访问即可。
Gzip技术启示还可以应用到其他地方,这里只是拿这个举个例子而已。