一个JavaServlet实例可以持续多长时间?同一实例是否服务于所有客户端?可以有多个实例吗?

一个JavaServlet实例可以持续多长时间?同一实例是否服务于所有客户端?可以有多个实例吗?,java,servlets,client,instance,lifecycle,Java,Servlets,Client,Instance,Lifecycle,我试图理解JavaServlet的生命周期 一个JavaServlet实例可以持续多长时间?这有多可靠?同一实例是否服务于所有客户端?或者同一servlet类的多个实例可以由不同的客户机生成?有没有一种方法可以强制保证同一个servlet实例永远存在(只要服务器打开),并且同一个servlet实例服务于所有客户机?或者已经保证是这样了吗?servlet类只有一个实例,这是由规范保证的 但是您不应该在servlet实例字段中存储任何内容。这至少不是线程安全的: 如果每个请求都需要某些内容,请将其

我试图理解JavaServlet的生命周期


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

servlet类只有一个实例,这是由规范保证的

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

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

servlet类只有一个实例,这是由规范保证的

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

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

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

现在,您应该了解servlet中的线程是如何工作的,以了解整个情况

最初存在,但一旦开发人员发现在性能方面序列化请求不是一个好主意,就不推荐使用;)


最后,web服务器通常有一个线程池,这些线程池在“每个连接的线程”模型中循环使用。最近,通过“每个请求线程”和异步处理,您有一个实例为该Servlet的所有请求提供服务。因此,它必须以某种方式编程(它不是线程安全的)

现在,您应该了解servlet中的线程是如何工作的,以了解整个情况

最初存在,但一旦开发人员发现在性能方面序列化请求不是一个好主意,就不推荐使用;)


最后,web服务器通常有一个线程池,这些线程池在“每个连接的线程”模型中循环使用。最近,使用“每个请求线程”和异步处理。

相关的可能重复:相关的可能重复:我要补充的是,在应用程序的整个生命周期中,它不保证是同一个实例,AFAIK。@Dave:只有在它实现了自Servlet 2.4(2003)以来的不推荐使用的
SingleThreadModel
,现在没有人应该使用它。这在规范中吗?我已经有一段时间没有寻找了,但我不记得看到过任何东西可以阻止容器破坏servlet实例并启动新实例。在非集群环境中,它在规范中,据我记忆所及,它不能保证在应用程序的整个生命周期中都是同一个实例,AFAIK.@Dave:只有当它实现了自Servlet 2.4(2003)被弃用以来的
SingleThreadModel
,现在没有人应该使用它。这在规范中吗?我已经有一段时间没有寻找了,但我不记得看到过任何可以阻止容器破坏servlet实例并启动新实例的东西