首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HttpServlet的生命周期是什么?

HttpServlet的生命周期是什么?
EN

Stack Overflow用户
提问于 2010-10-09 04:31:51
回答 11查看 15.2K关注 0票数 24

基本上,servlet的一个实例存在多长时间?我猜是会话作用域。但是,我认为它可能会有某种超时或垃圾回收来删除旧实例。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-10-09 04:42:33

  • servlet是在应用程序启动(部署在servlet容器上)或首次访问(取决于load-on-startup设置)时创建的。
  • 实例化servlet时,servlet的init()方法被调用
  • ,然后servlet (它的唯一实例)处理所有请求(它的service()方法由多个线程调用)。这就是为什么不建议在其中进行任何同步,并且您应该避免servlet
  • 的实例变量。当应用程序被取消部署(servlet容器停止)时,将调用destroy()方法。
票数 38
EN

Stack Overflow用户

发布于 2010-10-09 05:22:14

生命周期是定义良好的,并通过在Servlet的init、服务和销毁方法中公开的生命周期方法公开。

而且,不管这里还说了些什么,这就是你能从规范中得到的所有东西。基本上,您可以获得这三个方法,并保证Servlets不是线程安全的。单个servlet可以由一个或多个请求同时访问。

规范中没有将servlet限制到容器的一个实例,如果容器决定,它可以获得一个请求,创建一个servlet,调用它的init,然后是服务,然后销毁方法,并将其释放以进行垃圾收集。

每个容器都可能有不同的实现。

大多数容器都会创建单个实例。但是规范不能保证这一点,所以你不应该依赖它。

另外,考虑一下像Google App Engine这样的东西。GAE非常具有侵略性,它不断地过期并关闭整个web应用程序,这些应用程序没有收到任何流量。如果您有一个访问较少的站点,您可以很好地预期整个应用程序将启动,初始化其所有服务,初始化任何启动时加载的servlet,执行请求,然后关闭所有内容。因此,在GAE上,为了保持表面上的性能,您必须拥有一个非常快速的应用程序启动。

所以,简单地说,您可以依靠的是规范所说的内容。各个容器可能会提供不同的运行时体验。

票数 14
EN

Stack Overflow用户

发布于 2010-10-09 04:34:11

Servlet的生命周期与应用程序的生命周期相同。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3894088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档