tomcat jersey servlet初始化

时间:2013-10-14 17:53:42

标签: tomcat constructor initialization jersey

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

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

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

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

我想知道的是以下内容: 为什么Tomcat为每个针对我的webservice的HTTP请求调用我的webapp类构造函数? 此外,在我的webapp的日志中,我注意到init方法在构造函数之前被调用。这听起来很奇怪。对 ?还是不是真的? 但是,对于我的webservice的每个HTTP请求,都没有调用init方法。它只在Tomcat启动时调用。

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

非常感谢任何理解这种行为的帮助。

1 个答案:

答案 0 :(得分:0)

听起来你是在同一个班级中共同定位不同范围的工件,因此会产生奇怪的行为。

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

另一方面,泽西岛资源类是请求级范围,即每次有进入的处理请求时都会创建它。

我建议将它们分成两个单独的类。