全站压缩,最大的好久就是帮客户端节省流量。
数据压缩,我们需要用到二个Java类,也就是java.util.zip 中的
类 GZIPOutputStream
此类为使用 GZIP 文件格式写入压缩数据实现流过滤器。
java.io
类 ByteArrayOutputStream
此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
我们利用GZIPOutputStream(OutputStream out) 使用默认缓冲区大小创建新的输出流。
再用write(byte[] b)将 b.length 个字节写入此输出流。
也就是把数据压缩后写入ByteArrayOutputStream。
然后通过内存流输出到客户端。
也就是在一个servlet这样写:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM4MzNxQzMxETOxgDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
这样可以实现压缩,但是每次我们有一个servlet就要写一大长串的代码,很臃肿,也很麻烦,毕竟代码是一样的。而且还无法压缩jsp和html字符文件。
这个时候,我们就需要用到过滤器了。只要拦截所有的servlet和jsp/html就ok。只要写一次!很方便。
用过滤器来做全站压缩,无论你怎么增加servlet,jsp,html,还是照原来的写,不用你增加代码,我们只要在过滤器中对你的数据进行压缩发送到前台去就可以了!!!
注意,过滤器中用了装饰模式。
<a href="https://github.com/chenhaoxiang/Java/tree/master/myGzipWeb">https://github.com/chenhaoxiang/Java/tree/master/myGzipWeb</a>
myGzipWeb.zip
转载请附上原文博客链接:
<a href="http://blog.csdn.net/qq_26525215">http://blog.csdn.net/qq_26525215</a>