每个HTTP请求是否访问相同的servlet对象但是在不同的线程中?或者它是否创建了一个新线程和新的Servlet实例?
答案 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通常会有一个实例。