咱也有blog了- -| 回首页 | 2004年索引 | - -阿弥陀佛,耶稣于我何干

几个必需的Servlet Filter- -

                                      

      最近有空就看看http://www.onjava.com上的文章, 作一些笔记。这是第一篇。讲的是Servlet Filter,原文在这而儿http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html

      这篇文章里讲了两个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,可能得到另外一些启发。

- 作者: zolazhou 2004年12月17日, 星期五 23:54 加入博采

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=401926

回复

评论内容: