为HTTP servlet创建了多少实例



我正在翻阅《Java Web Services: Up and Running, 2nd Edition》这本书,看到这样一句话:

像Tomcat这样的web服务器可以实例化任意多个实例一个servlet,虽然这个数字通常很小(例如,1到4). web服务器自己做决定。

所以这意味着如果我创建一个servlet,那么服务器可以创建多个实例,但这与许多帖子中给出的解释相矛盾,例如,如果我检查这篇文章:"10个客户端请求一个servlet。创建了多少servlet实例",那么它清楚地声明:

只存在一个servlet实例(每个类加载器),并且每个请求将在它自己的线程上服务

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

Servlet规范说明

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

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

所以这取决于你是如何部署的。

如评论所示,SingleThreadModel已经被弃用很长时间了

默认情况下servlet是内在多线程的。因此,只创建一个实例,并将被多个线程访问。