code: private FilterChain getChainForName(int requestType, ServletHolder servletHolder) {
          if (servletHolder == null) {
              throw new IllegalStateException("Named dispatch must be to an explicitly named servlet");
          }
          
          if (_filterChainsCached)
          {
              synchronized(this)
              {
                  if (_namedChainCache[requestType].containsKey(servletHolder.getName()))
                      return (FilterChain)_namedChainCache[requestType].get(servletHolder.getName());
              }
          }
          
          // Build list of filters
          Object filters= null;
          
          if (jsr154Filter!=null)
          {
              // Slight hack for Named servlets
              // TODO query JSR how to apply filter to all dispatches
              filters=LazyList.add(filters,jsr154FilterHolder);
          }
          
          // Servlet filters
          if (_servletFilterMap.size() > 0)
          {
              Object o= _servletFilterMap.get(servletHolder.getName());
              for (int i=0; i<LazyList.size(o);i++)
              {
                  FilterMapping mapping = (FilterMapping)LazyList.get(o,i);
                  if (mapping.appliesTo(null,requestType))
                      filters=LazyList.add(filters,mapping.getHolder());
              }
          }
  
          FilterChain chain = null;
          if (_filterChainsCached)
          {
              synchronized(this)
              {
                  if (LazyList.size(filters) > 0)
                      chain= new CachedChain(filters, servletHolder);
                  _namedChainCache[requestType].put(servletHolder.getName(),chain);
              }
          }
          else if (LazyList.size(filters) > 0)
              chain = new Chain(filters, servletHolder);
          
          return chain;   
      }
docs: /* ------------------------------------------------------------