Java servlet实例可以持续多长时间?同一个实例是否为所有客户服务?可以有多个实例吗?

时间:2011-09-08 16:42:58

标签: java servlets client instance lifecycle

我正在尝试理解Java servlet的生命周期。

预期Java servlet实例可以持续多长时间?这有多可靠?同一个实例是否为所有客户服务?或者可以由不同的客户端生成同一个servlet类的多个实例?有没有办法强制保证同一个servlet实例永远存在(只要服务器已打开)并且相同的servlet实例为所有客户端服务?或者已经保证是这种情况了吗?

2 个答案:

答案 0 :(得分:3)

只有一个servlet类实例,并且由规范保证。

但是你不应该在servlet实例字段中存储任何东西。这至少不是线程安全的:

  • 如果您需要每个请求,请将其存储为请求属性
  • 如果您需要全局内容,请将其存储为ServletContext属性

答案 1 :(得分:0)

您有一个实例服务于该Servlet的所有请求。因此,它必须以reentrant方式编程(它不是线程安全的)。

现在,您应该了解servlet中的线程如何工作以理解整个图片。

最初存在SingleThreadModelInterface,但是一旦开发人员发现序列化请求并不是一个好主意,就会被弃用;)

最后,Web服务器通常有一个线程池,它们在“每个连接的线程”模型中循环使用。最近,this is being replaced带有“每个请求的线程数”和异步处理。