为HTTP Servlet创建了多少个实例

时间:2014-03-20 20:18:32

标签: java tomcat servlets

我正在阅读"Java Web Services: Up and Running, 2nd Edition"的书,并发表了一句话:

  

诸如Tomcat之类的Web服务器可以实例化任意多个实例   尽管数量通常很小(例如,1到1)   4)。 Web服务器本身就做出了决定。

所以这意味着如果我创建一个servlet,那么服务器可以创建多个实例,但这与许多帖子中给出的解释相矛盾,例如,如果我签入此帖子:" 10 clients requests for a Servlet.How many servlet instances are created "然后它明确指出:

  

只存在一个servlet实例(每个类加载器),每个实例   请求将在自己的线程上提供

那么请帮助我理解这一点,服务器是否可以为servlet创建多个实例?

2 个答案:

答案 0 :(得分:17)

Servlet Specification

  

对于未在分布式环境中托管的servlet(默认),   servlet容器每个servlet只能使用一个实例   声明。但是,对于实现的servlet   SingleThreadModel接口, servlet容器可以实例化   多个实例来处理繁重的请求加载和序列化   对特定实例的请求。

     

在将servlet部署为应用程序的一部分的情况下   在部署描述符中标记为可分发,容器可以   每个Java Virtual每个servlet声明只有一个实例   机器(JVM)。但是,如果servlet处于可分发状态   application实现了SingleThreadModel接口,即容器   可以在每个JVM中实例化该servlet的多个实例   容器

所以这取决于你的部署方式。

正如评论中所建议的,SingleThreadModel已被弃用了很长时间。

答案 1 :(得分:0)

默认情况下,servlet是内部多线程的。因此,只创建单个实例,并且将由多个线程访问。