配置了一个filter,代码:
public class ThreadFilter implements Filter{
 public void init(FilterConfig filterConfig) throws ServletException {

    }
 
 public void destroy() {
    }

  public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain)throws IOException, ServletException {
  HttpServletRequest req=(HttpServletRequest)request;
  System.out.println(req.getSession().getId());
  Threadbean.getInstance().setContext(req.getSession().getId());
  System.out.println("开始了...");
  chain.doFilter(request, response);
  }}
一开始启动tomcat到主页的时候filter会拦截两次,输出了两次信息,我的主页并没有使用action转发,后面就碰到有时候拦截不到的问题,信息没有输出,配置如下:
<filter>
<filter-name>threadfilter</filter-name>
<filter-class>com.shop.util.ThreadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>threadfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
是代码出错了还是配置出错了,filter要注意哪些细节上的问题?请高手指点一下。

解决方案 »

  1.   

    貌似无问题web.xml配置有先后顺序先filter 后servletfilter之间的访问顺序不是按<filter>的先后,而是按照<filter-mapping>的先后servlet与Filter一样按<sevlet-mapping>的先后楼主再检查检查。
      

  2.   

    如果有多个filter应该怎么配置,纳闷的是怎么有时候拦截不到,和路径有关系吗?
      

  3.   

    应该不是路径问题,要不然你也启动不了,会报错的多个filter之间的访问顺序不是按 <filter>的先后,而是按照 <filter-mapping>的先后
    所以你看看<filter-mapping>之间顺序,最好把你的这个类的<filter-mapping>放在最前面,这样不管怎么样都会先执行你的filter
      

  4.   


    如果是多个filter 就需要使用设计模式了,  过滤器模式  去好好研究下吧。
      

  5.   

    你配置的filter是根据你的请求进行拦截的,请求多少次拦截多少次。你写的这个filter只有一个打印的功能
      

  6.   

    楼主用的可能是2.4的版本,这个版本filter过滤器好像是默认过滤有参数的url,如果要想全部拦截,可以这样配置:
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST </dispatcher>
    <dispatcher>FORWARD </dispatcher>
    <dispatcher>INCLUDE </dispatcher>
    试试看行不行