HttpServlet的生命周期是什么?
基本上,一个 servlet 的实例存在了多长时间?我有点猜测这是会话范围。但是,我认为它可能有某种超时或垃圾回收来删除旧实例。
基本上,一个 servlet 的实例存在了多长时间?我有点猜测这是会话范围。但是,我认为它可能有某种超时或垃圾回收来删除旧实例。
load-on-startup
init()
service()
destroy()
生命周期定义得很好,并通过在 Servlet 的 init、service 和 destroy 方法中公开的生命周期方法公开。
而且,尽管这里还说了些什么,但这是您可以从规范中指望的一切。基本上,您将获得这三种方法,并保证Servlet不是线程安全的。单个 servlet 可以由一个或多个请求同时访问。
规范中没有任何内容将 servlet 限制为容器的一个实例,如果容器决定这样做,它可以获取请求,创建一个 servlet,调用它的 init,然后提供服务,然后销毁方法,并将其设置为空闲以进行垃圾回收。
各个容器可能具有不同的实现。
大多数容器都会创建单个实例。但是规范并不能保证这一点,所以你不应该依赖它。
另外,考虑像Google App Engine这样的东西。GAE非常激进,不断过期并关闭没有流量的整个Web应用程序。如果你有一个轻易浏览的网站,你完全可以期望整个应用程序启动,初始化其所有服务,初始化任何加载启动servlet,执行请求,然后关闭所有内容。因此,在GAE上,您必须拥有非常快速的应用程序启动,以保持任何性能。
所以,简单地说,你可以指望的是规范所说的。单个容器可能提供不同的运行时体验。