是HttpServlet Singleton吗?

时间:2016-10-09 06:50:08

标签: java tomcat servlets

根据servlet生命周期,对servlet的容器​​的第一个请求将调用init()方法(对于第一个请求只有一次),之后它将提供相应的service()方法,最后(结束) servlet的生命周期)destroy()方法将被调用。

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

我的查询如下:

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

    1. 当servlet生命周期完成时。据我所知,这意味着一旦启动服务器(首次请求后),servlet的生命周期将启动,一旦停止服务器,服务器的生命周期将完成?
    2. 请以我的理解确认。

1 个答案:

答案 0 :(得分:1)

2.2实例数

  

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

因此,从单例的规范和定义的上述引用开始,我们不能说Servlet是Singleton