这是我在这个论坛上的第一篇文章。如果我违反了任何规范,我会道歉。
我在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。
非常感谢任何理解这种行为的帮助。
答案 0 :(得分:0)
听起来你是在同一个班级中共同定位不同范围的工件,因此会产生奇怪的行为。
ServletContextListener应该是一个应用程序级范围,如果你愿意的话就是一个Singleton。
另一方面,泽西岛资源类是请求级范围,即每次有进入的处理请求时都会创建它。
我建议将它们分成两个单独的类。