【问题标题】:servlet life cycle while loadOnStartuploadOnStartup 时的 servlet 生命周期
【发布时间】:2011-07-07 14:21:43
【问题描述】:

当我们在 web.xml 中将任何 servlet 称为 loadOnStartup 时,肯定会调用其 init 方法。只是想确认servicedestroy 方法是否也被调用?如果不是在他们被叫到的时候?

另一个问题是每个地方都提到init 方法只被调用一次。这是否意味着当servlet第一次收到请求时,会先调用init方法,然后再调用service

但不会调用destroy。当第二次请求时,它只会再次调用服务方法,而不是 init 方法。这种理解正确吗?但是容器什么时候决定调用destroy方法呢?

【问题讨论】:

    标签: java servlets


    【解决方案1】:
    • loadOnStartup 表示将加载 servlet(并在容器启动期间调用其 init(..) 方法。否则,正如您所怀疑的,它将在第一个请求到来时加载
    • 容器中的每个 servlet 只有一个实例。当他们创建它时,他们调用init(..)。当上下文被取消部署时(例如 - 容器停止),destroy() 被调用

    【讨论】:

      【解决方案2】:

      loadOnStartup 优先考虑哪些线程在其他线程之前加载。 Servlet 容器将加载 servlet 并调用init 方法。如果web.xml 中没有提到loadOnStartup,则当有需要servlet 的请求调用时,servlet 将被实例化。

      servlet 的初始化只发生一次。一旦它被初始化,servlet 容器就会保存它。

      对于请求处理,servlet 容器调用 servlet 的 service() 方法,当 servlet 容器关闭时,它将调用所有 servlet 的 destroy() 方法并从容器中删除 servlet。

      欲了解更多信息,请查看here 或来自Java EE 的一些解释。

      【讨论】:

        【解决方案3】:

        当我们在web.xml 中启用load-on-start-up enable 时,我们的servlet 程序将在服务器启动期间被实例化。意味着每个请求的响应时间都相同。

        【讨论】:

          猜你喜欢
          • 2014-12-01
          • 2013-02-06
          • 1970-01-01
          • 2011-04-16
          • 1970-01-01
          • 2023-03-03
          • 2012-10-07
          • 2018-04-27
          • 1970-01-01
          相关资源
          最近更新 更多