为HTTP Servlet创建了多少个实例

我正在阅读“Java Web Services:Up and Running,2nd Edition”一书,并发表了一份声明:

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

所以这意味着如果我创建一个servlet然后服务器可以创建多个实例,但这与许多post中给出的解释相矛盾,例如,如果我在这篇文章中检查:“ 10个客户端请求Servlet。有多个servlet实例创造 “然后它明确指出:

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

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

Servlet规范说明

对于未托管在分布式环境中的servlet(缺省值),servlet容器每个servlet声明必须只使用一个实例。 但是,对于实现SingleThreadModel接口的servletservlet容器可以实例化多个实例以处理繁重的请求加载并将请求序列化到特定实例。

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

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

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

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