单例 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 过滤器的主要内容,如果未能解决你的问题,请参考以下文章