gpt4 book ai didi

tomcat Jersey servlet 初始化

转载 作者:行者123 更新时间:2023-11-28 23:41:15 24 4
gpt4 key购买 nike

这是我在这个论坛上的第一篇帖子。如果我违反了任何规范,我深表歉意。

我正在 Tomcat 容器内编写一个 RESTful servlet,将在启动时连接到数据库(通过 JDBC),然后在接收到 HTTP 请求时,它将 HTTP POST 请求中的数据插入到数据库中。

我现在知道可以通过在 jersey webapp 类中实现 ServletContextListener 接口(interface),在 contextInitialized 方法中初始化数据库连接。但是,我还有一个构造函数,它会不断为每个 HTTP post 请求调用。我只是定义了这个构造函数,因为我想我可能会在那里添加一些调试消息以了解流程。

请注意,我的 web.xml 将启动时加载参数设置为 1。

我想知道的是:为什么 Tomcat 为指向我的 web 服务的每个 HTTP 请求调用我的 webapp 类构造函数?此外,在我的 webapp 的日志中,我注意到 init 方法在构造函数之前被调用。这听起来很奇怪。正确的 ?还是不是真的?但是我的网络服务的每个 HTTP 请求都不会调用 init 方法。仅在 Tomcat 启动时调用。

我的 Tomcat 版本是 v7.0,我使用的是 JDK 1.7。

如能帮助理解此行为,我们将不胜感激。

最佳答案

这听起来像是将不同范围的工件放在同一个类中,因此出现了奇怪的行为。

ServletContextListener 应该是一个应用程序级范围,如果你愿意的话,也就是一个 Singleton。

另一方面,Jersey 资源类是请求级范围,即每次有传入请求要处理时都会创建它。

我建议将它们分离到两个单独的类中。

关于tomcat Jersey servlet 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19366159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com