【问题标题】:Is HttpServlet Singleton? [duplicate]HttpServlet 是单例吗? [复制]
【发布时间】:2016-10-09 06:50:07
【问题描述】:

根据 servlet 生命周期,对 servlet 容器的第一次请求将调用 init() 方法(第一次请求仅一次),之后它将服务相应的 service() 方法,最后(生命周期结束servlet) destroy() 方法将被调用。

意味着init()destory() 将在servlet 的生命周期中调用一次。

我的查询如下:

  1. servlet 生命周期是否与容器生命周期相同。所以我的理解是,一旦我们启动 tomcat 并且第一个请求来自 servlet,它将调用init() 方法,一旦我们停止服务器(tomcat 或 webcontainer),它将调用destroy() 方法。

所以从上面看来,servlet 是单例的。

  1. servlet 生命周期何时完成。据我了解,这意味着一旦您启动服务器(在第一次请求之后),servlet 的生命周期就会开始,一旦您停止服务器,服务器的生命周期就会完成?

请以我的理解确认。

【问题讨论】:

    标签: java tomcat servlets


    【解决方案1】:

    2.2 实例数

    通过注解的 servlet 声明 第 8 章“注解和可插入性”或部分 包含 servlet 的 Web 应用程序的部署描述符, 如第 14 章“部署描述符”中所述,控制 servlet 容器提供 servlet 的实例。对于 servlet 不 托管在分布式环境中(默认),servlet 每个 servlet 声明容器必须只使用一个实例。然而, 对于实现 SingleThreadModel 接口的 servlet, servlet 容器可以实例化多个实例来处理繁重的 request 加载和序列化对特定实例的请求。章节 2 Servlet 接口 7 在将 servlet 部署为 在部署描述符中标记为的应用程序的一部分 可分发的,一个容器每个 servlet 可能只有一个实例 每个 Java 虚拟机 (JVM™)1 的声明。但是,如果 servlet 在可分发的应用程序中实现 SingleThreadModel 接口,容器可以实例化该接口的多个实例 容器的每个 JVM 中的 servlet。

    所以从上面引用的规范和单例定义来看,我们不能说 Servlet 是单例

    【讨论】:

      猜你喜欢
      • 2012-08-02
      • 2012-11-15
      • 2018-06-03
      • 2012-02-01
      • 2016-12-03
      • 2021-11-13
      • 2021-12-08
      • 2012-07-15
      • 2017-09-23
      相关资源
      最近更新 更多