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条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?