【问题标题】:Singleton Servlet Filter单例 Servlet 过滤器
【发布时间】: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 过滤器实例?

【问题讨论】:

  • 为什么需要它是单例?过滤器的生命周期应该由容器处理。

标签: java tomcat servlets singleton servlet-filters


【解决方案1】:

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

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

第 6.2.1 节还说:

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

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

【讨论】:

猜你喜欢
  • 2012-06-24
  • 2012-02-17
  • 2011-02-26
  • 2013-04-09
  • 2014-02-12
  • 2010-12-30
  • 2015-09-12
  • 2020-09-29
  • 2012-04-25
相关资源
最近更新 更多