单例 Servlet 过滤器

Posted

技术标签:

【中文标题】单例 Servlet 过滤器【英文标题】:Singleton Servlet Filter 【发布时间】:2014-04-07 14:44:38 【问题描述】:
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】:

如果您使用 web.xml 或注释配置过滤器,那么您需要为容器提供一个公共的、无参数的构造函数来实例化它(Servlet Spec 3.1 的第 6.2 节):

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

第 6.2.1 节还说:

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

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

【讨论】:

参见Servlet Specification 3.1中的第4.4.2节

以上是关于单例 Servlet 过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Servlet过滤器-日志记录

是 Java 过滤器单例吗

过滤器

Servlet 过滤器

Servlet过滤器,Servlet过滤器创建和配置

javaWeb中servlet开发——过滤器