每个请求是否访问相同的servlet对象?

时间:2012-09-20 09:34:31

标签: java http servlets request

每个HTTP请求是否访问相同的servlet对象但是在不同的线程中?或者它是否创建了一个新线程和新的Servlet实例?

2 个答案:

答案 0 :(得分:13)

如果servlet没有实现SingleThreadModel,容器将使用相同的servlet实例。 否则,无法保证击中相同的Servlet对象。如果认为有必要,容器可以自由创建更多的servlet实例。但是请求来自不同的线程,不一定是新创建的(正如Sanjay所提到的)。

从Servlet 3.0规范:

  

对于未在分布式环境中托管的servlet(缺省值),servlet   容器必须每个servlet声明只使用一个实例。但是,对于servlet   实现SingleThreadModel接口,servlet容器可以   实例化多个实例以处理繁重的请求加载和序列化请求   一个特定的例子。

...

  

通常,Web容器处理对同一个servlet的并发请求   在不同的线程上并发执行服务方法。

答案 1 :(得分:8)

每个HTTP请求都会创建一个新线程,但会访问Servlet的同一个实例。

编辑:如果是一个服务器节点,则该节点上将具有相同的Servlet实例。在负载平衡/许多服务器的情况下,每个Java VM通常会有一个实例。