LearningLog.GZIPFilter

Jayson Falkner 在他的 Two Servlet Filters Every Web Application Should Have http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html?page=1 ) 里面介绍了 2 个提高 Java Web Application 效能的 Servlet 。这里记一下其中的 GZIPFilter

GZIPFilter可以用gzip的方式压缩HTTP Response的内容,从而在Server端加快了响应回复的速度(gzip压缩过程需耗用CPU资源,却大幅减轻了网卡的处理负担),在Client端缩短了页面刷新时间,在网络内减少了数据流量。另一方面,因为采用的Filter的方式,无需改动应用现有的代码就可引入该功能。


以上Filtersource code在这里(http://www.onjava.com/onjava/2003/11/19/examples/jspbook.zip 下载。当然也可以在这里(http://www.onjava.com/onjava/2003/11/19/examples/jspbook.jar )下载现成的JAR

作者定义了3个类来实现这个压缩功能:GZIPFilter, GZIPResponseWrapper, GZIPResponseStream。类图大致如下:

3 个类要做的,就是在 Server 将响应内容装入 HTTP Response 之前,先对内容进行 GZIP 压缩。其中 GZIPFilter 实现了 javax.servlet.Filter 接口,在 Java Web Container 处理 HTTP Response 的过程中便可以挂载使用。另外 2 个类( GZIPResponseWrapper,GZIPResponseStream )基本上是辅助类,真正的压缩动作是在 GZIPResponseStream 中由 java.util.zip.GZIPOutputStream 来完成的,除此还有其它的一些方法,感觉似乎并没有全部用到。这部分还需要另外再研究。


要布署这个Filter也很简单。只要将JAR放至应用的library目录,并且在应用的布署配置文件web.xml中加入

<filter>

<filter-name>GZIPFilter</filter-name>

<filter-class>com.jspbook.GZIPFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>GZIPFilter</filter-name>

<url-pattern>/*.jsp</url-pattern>

</filter-mapping>

然后启动Server就可以了。

GZIPFilter压缩HTTP Response内容的作用非常明显。作者在source code的包里面另外放了TestGZIP.jsp,这是用来显示GZIPFilter的压缩效果的JSP。你可以找一支产生大量内容的目标JSP来测验一下,就像下面这支show_response_compressed.jsp


<%@ page import="java.io.*" %>

<%@ page import="java.util.zip.*" %>


<%

String title = "Show Compressed Response";

int size = 100000;


out.println("<HTML>/n" +

"<HEAD><TITLE>" + title + "</TITLE></HEAD>/n" +

"<BODY BGCOLOR=/"#FDF5E6/">/n" +

"<H1 ALIGN=/"CENTER/">" + title + " SIZE="+size+"</H1>/n");


String line = "Blah, blah, blah, blah, blah. " +

"Yadda, yadda, yadda, yadda.";

for(int i=0; i<size; i++) {

out.println(line);

}

out.println("</BODY></HTML>");


%>

运行show_response_compressed.jsp可以产生类似如下截图中的页面。


运行TestGZIP.jsp,在URL中填入show_response_compressed.jsp 所在的地址,提交后即可得到如下结果。

 

可以看到,未经压缩的HTTP Response数据量达到了2,950,086 bytes (2.9MB),而压缩后的数据量仅有8,687 bytes8 KB),压缩比高达99.7%


因为是在一台机器上作的验证,所以在响应时间的改善方面感觉不是很明显。同样的,如果是在Intranet环境内,则这种效果也不会很明显。如果是在Internet上测试,改善的效果应该会比较明显。


--END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值