danyajuan 2015-04-21 05:44 采纳率: 100%
浏览 4642
已采纳

自定义的过滤器为何初始化两次?

Filter定义:
public class EncodingFilter implements Filter {

/**
 * Default constructor. 
 */
public EncodingFilter() 
{
    System.out.println("创建过滤器EncodingFilter");
}

/**
 * @see Filter#destroy()
 */
public void destroy() {
    // TODO Auto-generated method stub
    System.out.println("filter destroy");
}

/**
 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
 */
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    // TODO Auto-generated method stub
    // place your code here

    HttpServletRequest httpReq = (HttpServletRequest)request;
    System.out.println("call Encoding doFilter,requestURI:" + httpReq.getRequestURI());

    response.setContentType("text/html; charset=UTF-8");
    // pass the request along the filter chain
    chain.doFilter(request, response);

}

/**
 * @see Filter#init(FilterConfig)
 */
public void init(FilterConfig fConfig) throws ServletException {
    // TODO Auto-generated method stub
    System.out.println("Encoding Filter init,config:" + fConfig);
}

Filter配置:

encodingFilter
filter.EncodingFilter


encodingFilter
/login.jsp

启动容器时,打印结果如下:

创建过滤器EncodingFilter

Encoding Filter init,config:ApplicationFilterConfig[name=encodingFilter, filterClass=filter.EncodingFilter]
创建过滤器EncodingFilter
Encoding Filter init,config:ApplicationFilterConfig[name=filter.EncodingFilter, filterClass=filter.EncodingFilter]

从打印信息来看,是执行了两次init。根据debug,进一步证实。
疑问是,既然filter配置的是同一个过滤器,那么为什么初始化时要调用两次呢?而且两次的fitername不一样。

求解。

  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2015-04-21 06:28
    关注

    你是配置了两个过滤器的,只是过滤器的类型是同一个。
    容器启动过程中是根据你配置的filter节点创建过滤器的,你配置了两个名称不同但类型相同的过滤器,那它就会实例化两个过滤器了。
    祝好!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料