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

问题描述

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

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不一样。

求解。

解决方案

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

解决方案二:

谢谢楼上的回答,我的过滤器仅仅配置了一个。由于自动添加了注解,所以重复了。
已解决。
时间: 2024-09-30 07:39:26

filterconfig-自定义的过滤器为何初始化两次?的相关文章

钻牛角尖————“init()事件发生在所有的控件被初始化,所有的皮肤设置被应用以后。它用来读取或者初始化控件属性”————这句话矛盾不?怎么初始化两遍啊?

问题描述 Init():这个事件发生在所有的控件被初始化,所有的皮肤设置被应用以后.它用来读取或者初始化控件属性.这句话我不理解,感觉矛盾.到了init()这步,所有的控件不是都被初始化完了嘛,为什么还说"读取或初始化控件属性"?这不是初始化两遍嘛?微软上也是这么说的:Init():在所有控件都已初始化且已应用所有外观设置后引发.使用该事件来读取或初始化控件属性.难道"控件初始化"与"初始化控件属性"是两个不同的概念嘛? 解决方案 解决方案二:首

Tomcat启动时项目重复加载所导致资源初始化两次的问题

最近在项目开发测试的时候,发现Tomcat启动时项目重复加载,导致资源初始化两次的问题 导致该问题的原因: 如下图:在Eclipse中将Server Locations设置为"Use Tomcat installation(takes control of Tomcat installation)"时, 就会导致该问题! 根本原因: 解决方法一: 把server.xml中的context删除掉

使用AngularJS创建自定义的过滤器的方法

  这篇文章主要介绍了使用AngularJS创建自定义的过滤器的方法,AngularJS是非常热门的JavaScript库,需要的朋友可以参考下 Angularjs过滤器是 angularjs非常棒的特性之一.有朝一日,你可能需要使用自定义过滤器,幸运的是,你找到了这篇博文. 下面显示的是自定义过滤器长什么样子(请注意myfilter): 我们的自定义过滤器叫做 "myfilter", 它有由 ':'隔开的4个参数. 这是一个将会用到的样本输入: ? 1 2 3 4 5 6 $scop

shiro spring struts-shiro自定义authc过滤器的问题

问题描述 shiro自定义authc过滤器的问题 配置了 过滤器代码如下public class FormAuthenticationCaptchaFilter extends FormAuthenticationFilter { public static final String DEFAULT_CAPTCHA_PARAM = ""captcha""; private String captchaParam = DEFAULT_CAPTCHA_PARAM;pub

关于proxy-target-class=true时,对象初始化两次的问题?

问题描述 无论是设置<aop:config proxy-target-class="true">还是使用<aop:aspectj-autoproxy proxy-target-class="true"/>,只要proxy-target-class设置为true,spring的service都会初始化两次(通过重写默认构造方法打印提示信息),有谁知道是什么原理吗,能否解释一下,谢谢! 解决方案 1.第一个 目标对象2.第二次 代理对象

在Django框架中自定义模板过滤器的方法_perl

自定义过滤器就是有一个或两个参数的Python函数:     (输入)变量的值     参数的值, 可以是默认值或者完全留空 例如,在过滤器 {{ var|foo:"bar" }} 中 ,过滤器 foo 会被传入变量 var 和默认参数 bar. 过滤器函数应该总有返回值. 而且不能触发异常,它们都应该静静地失败. 如果出现错误,应该返回一个原始输入或者空字符串,这会更有意义. 这里是一些定义过滤器的例子: def cut(value, arg): "Removes all

ansible运维工具filter_plugins插件如何实现jinja2自定义filter过滤器

前言:    filter_plugins是什么? 这个单词拆解下,filter !  熟悉jinja2模板的人,到知道他是过滤器,可以在模板中以管道的方式用pyhton的代码处理字符串. ansible模板调用的是jinja2,这个大家都知道 . 这个filter_plugins插件代码,就是为了更好的处理jinja2模板中的字符串和逻辑判断的. 先前,我和沈灿讨论一个模板的问题,实在蛋疼的要命,总是达不到我们要的数据,当时是做一个数据的统计和rabbitmq的配置,有些地方用jinja2模板

MVC4自定义授权过滤器如何对免登录用户跳过session检查

问题描述 本人MVC新手,正在试着做权限过滤器,目前基本功能都可以实现,但是有个问题一直解决不了我通过filterContext.HttpContext.User.Identity.IsAuthenticated判断用户是否已经完成登录如果登录了就继续往下判断session是否过期,session没有过期就判断是否拥有权限可是如果用户是免登录即保存密码上来的,那么当判断到session的时候一定是null,会导致重定向到登录页.结果我就想通过filterContext.HttpContext.R

自定义的过滤器的问题

问题描述 我在web.xml中自定义了一个过滤器(写在了struts的前面)<filter> <filter-name>LogFilter</filter-name> <filter-class>com.type.util.LogFilter</filter-class> <init-param> <param-name>log4jConfigLocation</param-name> <param-va