Tomcat源码分析(过滤器)filterchain filter_joeytang9118_新浪博客
Tomcat源码分析(过滤器)filterchain filter(2010-01-21 15:46:16)
Tomcat的过滤器主要由Filter、FilterChain组成,FilterChain包含一个Filter数组.当Wrapper执行FilterChain的doFilter(request,response)方法时,FilterChain首先调用{dy}个Filter的doFilter(request,response,filterchain)方法,当{dy}个filter做完过滤操作后,它又会调用filterchain的doFilter方法,此时filterchain的当前filter已变为第二个filter,第二个filter又执行dofilter方法,依此类推,直至所有过滤器都执行完毕

1.接口
  1. public interface Filter {   
  2.         .....          
  3.         //执行过滤   
  4.         public void doFilter ServletRequest request, ServletResponse response, FilterChain chain throws IOException, ServletException;   
  5.   
  6. }   
  7.   
  8. public interface FilterChain {   
  9.     public void doFilter ServletRequest request, ServletResponse response throws IOException, ServletException;   
  10.  
public interface Filter {
        .....       
        //执行过滤
        public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException;

}

public interface FilterChain {
    public void doFilter ( ServletRequest request, ServletResponse response ) throws IOException, ServletException;
}


2.实现例子
  1. class ApplicationFilterChain implements FilterChain {   
  2.       
  3.    //pos为当前filter的所在位置,n为filters数组的长度   
  4.    if (pos n) {   
  5.             //pos++执行后,把filterchain的当前filter指向下一个   
  6.             ApplicationFilterConfig filterConfig filters[pos++];   
  7.             Filter filter null;   
  8.             try {   
  9.                 filter filterConfig.getFilter();   
  10.   
  11.                 //filter执行过滤操作   
  12.                 filter.doFilter(request, response, this);   
  13.             }   
  14.             ...   
  15.    }   
  16. }   
  17.   
  18.   
  19. class SampleFilter implements Filter {   
  20.       ........   
  21.       public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)   
  22.         throws IOException, ServletException {   
  23.             
  24.          //do something    
  25.          .....   
  26.          //request, response传递给下一个过滤器进行过滤   
  27.          chain.doFilter(request, response);   
  28.     }   
  29.          
  30.  
class ApplicationFilterChain implements FilterChain {
   
   //pos为当前filter的所在位置,n为filters数组的长度
   if (pos < n) {
            //pos++执行后,把filterchain的当前filter指向下一个
            ApplicationFilterConfig filterConfig = filters[pos++];
            Filter filter = null;
            try {
                filter = filterConfig.getFilter();

                //filter执行过滤操作
                filter.doFilter(request, response, this);
            }
            ...
   }
}


class SampleFilter implements Filter {
      ........
      public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
        throws IOException, ServletException {
         
         //do something 
         .....
         //request, response传递给下一个过滤器进行过滤
         chain.doFilter(request, response);
    }
      
}


过滤器可以在web.xml中进行配置
已投稿到:
郑重声明:资讯 【Tomcat源码分析(过滤器)filterchain filter_joeytang9118_新浪博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——