|
用户名:zolazhou 笔名:zolazhou 地区: |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
程序行当里的时尚
阿弥陀佛,耶稣于我何干
几个必需的Servlet Filter
这篇文章里讲了两个Filter,Caching Filter and Compression Filter。说这是每个web应用程序必备的两个Filter,可是在我做过的项目里确一个都没用过(实际上我只做过一两个项目:>)。做过Caching,但不是以Filter的形式做的,OSCache就有一种cache的Filter用法。所以Caching Filter我不是很好奇,这里我比较感兴趣的是Compression Filter。一种将response content压缩的filter,以此减少数据流量,加快相应速度。这对于一些大块的文本内容的确能起到一些预期的作用。
HTTP protocol allows for GZIP compression,正因为如此,GZIPFilter就能实现了,但是并不是所有的浏览器都支持GZIP。所以我们要在压缩前判断客户端浏览器是不是支持。
...
public class GZIPFilter implements Filter {
// custom implementation of the doFilter method
public void doFilter(ServletRequest req,
ServletResponse res,
FilterChain chain)
throws IOException, ServletException {
// make sure we are dealing with HTTP
if (req instanceof HttpServletRequest) {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
// check for the HTTP header that
// signifies GZIP support
String ae = request.getHeader("accept-encoding");
if (ae != null && ae.indexOf("gzip") != -1) {
System.out.println("GZIP supported, compressing.");
GZIPResponseWrapper wrappedResponse = new GZIPResponseWrapper(response);
chain.doFilter(req, wrappedResponse);
wrappedResponse.finishResponse();
return;
}
chain.doFilter(req, res);
}
}
至于怎么实现压缩就不说了。这里还有一点要注意的是当我们与Caching Filter一起使用时,并且Caching Filter在Compression Filter之前,那么Caching Filter将直接返回压缩后的相应信息。那么如果客户端不支持GZIP,咋办?
有个家伙做了一个项目,专门实现了这个Filter,http://sourceforge.net/projects/pjl-comp-filter/。
这位作者后来还有一篇文章 Another Java Servlet Filter Most Web Applications Should Have ,这个Filter只是在Response里设置一些头信息以让客户端浏览器缓存某些请求的相应,以此减少向服务器发送请求的次数。得好好看看HTTP,可能得到另外一些启发。
咱也有blog了
以前在博客动力上注册过一个, 但是这个网站很不稳定, 老出毛病, 所以就没玩了. 最近在blogger.com上又注册了一个, 可是只能管理发布, 看不到发布的东西, 据说是blogspot.com又被封了. 所以又在blogchina上注册了一个.
我没那么伟大, 我记的东西都不是为了帮助其他人解决问题的. 如果碰巧帮到了别人, 那也是无心插柳. 另外, 因为是个刚毕业的newbie, 如果记的东西误导了别人, 我也概不负责.