Servlet 过滤器 - 上下文初始化

Posted

技术标签:

【中文标题】Servlet 过滤器 - 上下文初始化【英文标题】:Servlet Filters - Context Initialization 【发布时间】:2011-12-07 02:01:37 【问题描述】:

当使用“全局”过滤器时,它位于 apache tomcat 网络服务器的根 lib 目录中,适用于所有网络应用程序上下文: 我想知道 Web 应用程序上下文是否是同步初始化的 - 一次一个,或者是否存在两种不同的上下文同时调用 Filter.init() 函数的情况。

我问这个是因为我想在任何应用程序上下文第一次调用 init() 时基于特定的 FilterConfig.initParameter 初始化数据库连接配置对象,我想知道是否应该将以上是否在同步块中...

【问题讨论】:

【参考方案1】:

我认为这是 Tomcat 的内部结构,它可以随时更改,所以我会在同步块中进行。这不是什么大问题或性能问题,因为它在每个应用程序上下文初始化时只运行一次。

来自Java Servlet Specification6.2.1 过滤器生命周期

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

您可以使用自定义阀门达到相同的结果:

The Valve Component Valve javadoc

【讨论】:

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

Servlet 过滤器和 Servlet 上下文侦听器有啥区别?

拦截器和过滤器的区别

拦截器

过滤器监听器上下文servlet线程安全问题

无法过滤上下文根 Servlet 请求

拦截器和过滤器的区别