0

这是我在这个论坛上的第一篇文章。如果我违反了任何规范,请道歉。

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

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

请注意,我的 web.xml 将 load-on-startup 参数设置为 1。

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

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

任何有助于理解这种行为的帮助将不胜感激。

4

1 回答 1

0

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

一个 ServletContextListener 应该是一个应用程序级别的范围,如果你愿意的话,一个单例。

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

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

于 2013-10-15T00:30:18.337 回答