Singleton Servlet过滤器

时间:2014-03-05 13:41:46

标签: java tomcat servlets singleton servlet-filters

public class URLFilter implements Filter {

    private URLFilter() {
        //New instances are not permitted
    }

    @Override
    public void init(FilterConfig filterConfig) {

    }

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    }

}

给我错误:

  

类org.apache.catalina.core.DefaultInstanceManager无法访问   具有修饰符的类com.example.singleton.URLFilter的成员   “私有”

如何防止创建多个servlet过滤器实例?

1 个答案:

答案 0 :(得分:3)

如果使用web.xml或注释配置过滤器,则需要为容器提供一个public,no args构造函数来实例化它(Servlet规范3.1的第​​6.2节):

  

应用程序开发人员通过实现创建过滤器   javax.servlet.Filter接口并提供一个不带的公共构造函数   参数

第6.2.1节也说:

  

部署描述符中每个声明只有一个实例   根据容器的JVM实例化

如果您需要更精细地控制过滤器实例化,则需要使用过滤器的编程注册(参见Servlet Specification 3.1中的第4.4.2节)。