2

我知道像 jboss 这样的 web 容器有一个参数来提及要创建的 servlet 的线程数,这是容器可以创建以在 servlet 的单个实例上运行的最大线程数。

然而,我的问题是,有没有办法指定要创建的 servlet 实例的数量?如果是,目的是什么?对此的需求可能是处理请求,当说在单个实例上运行的一个或多个线程以某种方式破坏该 servlet 数据或销毁()它时 - 冗余目的。

4

1 回答 1

5

编辑:当心!从 Servlet 规范 2.4 开始,接口 javax.servlet.SingleThreadModel已弃用,没有直接替换。

规范不清楚容器是否应该创建同一个 servlet 的多个实例,或者总是只创建一个实例。


来自 Servlet 规范 2.4 http://download.oracle.com/otndocs/jcp/servlet-2.4-fr-spec-oth-JSpec/

SRV.2.2 实例数

servlet 声明是包含 servlet 的 Web 应用程序的部署描述符的一部分,如第 SRV.13 章“部署描述符”中所述,它控制 servlet 容器如何提供 servlet 的实例。对于不在分布式环境中托管的 servlet(默认设置),servlet 容器必须在每个 servlet 声明中仅使用一个实例。但是,对于实现 SingleThreadModel 接口的 servlet,servlet 容器可能会实例化多个实例来处理繁重的请求负载并将请求序列化到特定实例。

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

您可以在文档中找到有关单线程模型的更多信息

于 2011-10-19T19:09:06.780 回答