我知道像jboss这样的Web容器有一个参数来提及要创建的servlet的线程数,这是容器可以在servlet的单个实例上运行的最大线程数。
我的问题是,有没有办法指定要创建的servlet的实例数?如果是,目的是什么?对此的需求可能是处理请求,当一个或多个线程上运行的线程以某种方式破坏servlet数据或者破坏()它时 - 冗余目的。
答案 0 :(得分: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声明只有一个实例。但是,对于servlet 实现SingleThreadModel接口,即servlet容器 可以实例化多个实例来处理繁重的请求负载 序列化对特定实例的请求。
在a的情况下 servlet被部署为标记在中的应用程序的一部分 部署描述符为可分发的,容器可能只有一个 每个Java虚拟机(JVMTM)的每个servlet声明的实例。 但是,如果可分发应用程序中的servlet实现了 SingleThreadModel接口,容器可以实例化多个 容器的每个JVM中该servlet的实例。
您可以在文档中找到有关单线程模型的更多信息