2014-03-31 43 views
2

根据java文档,它说如果使用SingleThreadModel,则创建并使用一个servlet实例有两种方式 1.创建一个servlet实例并使service()方法同步,因此只允许一个线程执行服务方法。 2.创建一个servlet池并通过为每个请求使用池中的一个servlet实例来提供请求。使用SingleThreadModel时servlet的生命周期管理

我想问的问题是我也读过一个新的Servlet实例创建和销毁每个请求。现在,哪一个是正确

+0

你能分享引用的在线文档/书 – spiderman

回答

0

这里的规范说什么(3.0版,2.2节):

对于在分布式环境中(默认值)不举办一个servlet,servlet容器只能使用一个实例每个servlet声明。但是,对于实现SingleThreadModel接口的Servlet,servlet容器可以实例化多个实例来处理沉重的请求负载并将对特定实例的请求序列化。

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

请注意,您应该不使用单线程模型。只要确保你的servlet是thread-sae。一个servlet通常是无状态的,所以你不需要做任何事情来使其线程安全。

+0

为什么downvote? –

+0

我喜欢你的答案。 +1从我身边。如果你有时间,你能详细说明一下你在这里给出的答案:http://stackoverflow.com/questions/8687765/servlet-synchronization-when-multiple-instances?rq=1# –

0

从文档为SingleThreadModel

确保servlet的同时

这在本质上是一种方法,使非线程安全的servlet代码工作只处理一个请求。需要注意的是,容器可以自由选择任何两个实现的坚持规格:

  1. 创建servlet的一个实例,并确保它在一个时间
  2. 只处理一个请求创建池servlet实例并将请求移交给可用的servlet实例。
相关问题