【问题标题】:tomcat jersey servlet initializationtomcat jersey servlet初始化
【发布时间】:2013-10-14 17:53:42
【问题描述】:

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

我正在 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。

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

【问题讨论】:

    标签: tomcat constructor initialization jersey


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多