Servlet 过滤器 - 上下文初始化

发布于 2024-12-09 10:33:04 字数 261 浏览 0 评论 0原文

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

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

When using a "global" filter, one which is located in the root lib directory of an apache tomcat webserver and applies to all web application contexts:
I was wondering if the web application contexts are initialized synchronously - one at a time, or can there be a case where the Filter.init() function is called by two different contexts in the same time.

I'm asking this since I want to initialize a database connection configuration object based on a specific FilterConfig.initParameter the first time init() is called by any of the application contexts, and I'm wondering if I should put the above in a synchronized block or not...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

睡美人的小仙女 2024-12-16 10:33:04

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

来自 Java Servlet 规范 6.2 .1 过滤器生命周期

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

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

I think it's the internals of Tomcat, it could change any time so I'd do it in a synchronized block. It's not a big deal or performance issue because it runs only once per application context initialization.

From Java Servlet Specification 6.2.1 Filter Lifecycle:

Only one instance per <filter> declaration in the deployment
descriptor is instantiated per JVM of the container.

You could reach the same result with a custom Valve:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文