Java 单例Servlet过滤器

Java 单例Servlet过滤器,java,tomcat,servlets,singleton,servlet-filters,Java,Tomcat,Servlets,Singleton,Servlet Filters,给我一个错误: 类org.apache.catalina.core.DefaultInstanceManager无法访问 带有修饰符的com.example.singleton.URLFilter类成员 “私人” 如何防止创建多个servlet筛选器实例?如果使用web.xml或注释配置筛选器,则需要为容器提供一个公共的无参数构造函数来实例化它(servlet规范3.1第6.2节): 应用程序开发人员通过实现 Filter接口,并提供一个公共构造函数 论据 第6.2.1节还规定: 在部署描述符中

给我一个错误:

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


如何防止创建多个servlet筛选器实例?

如果使用web.xml或注释配置筛选器,则需要为容器提供一个公共的无参数构造函数来实例化它(servlet规范3.1第6.2节):

应用程序开发人员通过实现 Filter接口,并提供一个公共构造函数 论据

第6.2.1节还规定:

在部署描述符中,每个声明只包含一个实例 按容器的每个JVM实例化


如果需要更好地控制过滤器实例化,则需要使用过滤器的编程注册(请参阅中的第4.4.2节)。

为什么需要将其设置为单例?过滤器的生命周期应由容器处理。请参阅中的第4.4.2节
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 {

    }

}