我正在阅读“ JavaWeb服务:启动和运行,第二版”这本书,并遇到了一条声明:
Web服务器(例如Tomcat)可以实例化Servlet的许多实例,尽管数量通常很少(例如1到4)。Web服务器本身做出决定。
因此,这意味着如果我创建一个Servlet,则服务器可以创建多个实例,但这与许多帖子中给出的解释相矛盾,例如,如果我查看以下帖子:“10个客户端请求一个Servlet。有多少个Servlet实例。被创建 ”,然后明确指出:
(每个类加载器)仅存在一个servlet实例(每个实例都将在其自己的线程上服务)
因此,请帮助我理解这一点,服务器是否可以为一个servlet创建多个实例?
该Servlet规范状态
对于未在分布式环境中托管的Servlet(默认设置),每个Servlet声明中,Servlet容器必须仅使用一个实例。 但是,对于实现该 SingleThreadModel接口 的servlet , 该servlet容器可以实例化多个实例以处理繁重的请求负载并将请求序列化到特定实例。 如果将servlet作为部署描述符中标记为可分发的应用程序的一部分进行部署,则每个Java虚拟机(JVM)的每个servlet声明中,一个容器可能只有一个实例。但是,如果可分发应用程序中的servlet实现了该SingleThreadModel接口,则容器可以在容器的每个JVM中实例化该servlet的多个实例。
对于未在分布式环境中托管的Servlet(默认设置),每个Servlet声明中,Servlet容器必须仅使用一个实例。 但是,对于实现该 SingleThreadModel接口 的servlet , 该servlet容器可以实例化多个实例以处理繁重的请求负载并将请求序列化到特定实例。
SingleThreadModel
如果将servlet作为部署描述符中标记为可分发的应用程序的一部分进行部署,则每个Java虚拟机(JVM)的每个servlet声明中,一个容器可能只有一个实例。但是,如果可分发应用程序中的servlet实现了该SingleThreadModel接口,则容器可以在容器的每个JVM中实例化该servlet的多个实例。
因此,这取决于您的部署方式。
如评论中所建议,SingleThreadModel已被弃用很长时间。