根据java文档,它说如果使用SingleThreadModel,有两种方法可以创建和使用servlet实例 1.创建一个servlet实例并使service()方法同步,从而只允许一个线程执行服务方法。 2.创建一个servlet池,并使用池中的一个servlet实例为每个请求提供请求。
我想问的问题是我还读过一个新的Servlet实例,它是为每个请求创建和销毁的。现在哪一个是正确的
答案 0 :(得分:0)
这是规范所说的(版本3.0,第2.2节):
对于未托管在分布式环境中的servlet(缺省值),servlet容器每个servlet声明必须只使用一个实例。但是,对于实现SingleThreadModel接口的servlet,servlet容器可以实例化多个实例以处理繁重的请求加载并将请求序列化到特定实例。
如果将servlet部署为部署描述符中标记为可分发的应用程序的一部分,则每个Java虚拟机(JVMTM)1的容器每个servlet声明只能有一个实例。但是,如果可分发应用程序中的servlet实现SingleThreadModel接口,则容器可以在容器的每个JVM中实例化该servlet的多个实例。
请注意,您应该不使用单线程模型。只要确保你的servlet是线程的。 servlet通常是无状态的,因此你无需做任何事情来使其成为线程安全的。
答案 1 :(得分:0)
来自SingleThreadModel
的文档:
确保servlet一次只处理一个请求
这实质上是一种使非线程安全的servlet代码工作的方法。请注意,容器可以自由选择遵循规范的两种实现中的任何一种: