Jakarta ee 如果没有请求,servlet的生存期是多久?

Jakarta ee 如果没有请求,servlet的生存期是多久?,jakarta-ee,servlets,java-ee-6,Jakarta Ee,Servlets,Java Ee 6,servlet处理请求后,会立即对其进行垃圾收集吗?或者,它会在等待后续请求的情况下再活一段时间吗 如果一个servlet立即死亡,那么接下来的请求就很遗憾了 如果servlet存在很长时间,那么它可能会浪费资源 所以我认为这是一个平衡的问题。有没有办法决定/配置servlet在处于空闲状态后应该存活多长时间?最初没有加载servlet。Servlet在应用程序启动后第一次收到调用时被加载 它可以从内存中删除,也可以不从内存中删除。这取决于Servlet容器(如Tomcat/JBoss),这些容

servlet处理请求后,会立即对其进行垃圾收集吗?或者,它会在等待后续请求的情况下再活一段时间吗

如果一个servlet立即死亡,那么接下来的请求就很遗憾了

如果servlet存在很长时间,那么它可能会浪费资源

所以我认为这是一个平衡的问题。有没有办法决定/配置servlet在处于空闲状态后应该存活多长时间?

最初没有加载servlet。Servlet在应用程序启动后第一次收到调用时被加载

它可以从内存中删除,也可以不从内存中删除。这取决于Servlet容器(如Tomcat/JBoss),这些容器决定Servlet应该在内存中保留多长时间

如果Servlet是idlei.e,那么请求到达的时间太长,容器可能会将其从内存中卸载

但是现在让我们假设卸载后,servlet的另一个请求到达。 然后容器再次将Servlet加载到内存中。这不会影响WebApplication的功能。因为每个请求都在一个单独的线程上被专门处理。没有两个请求是相互依赖的

您无法决定何时在作业任务属于Web容器的内存中卸载或加载Servlet。比如Tomcat/Jboss/Glassfish

这就是为什么您有ServletRequestListner、ServletResponseListner等侦听器,它们可以在创建和销毁Servlet/Request/Response对象等事件时帮助您做一些事情,因为这些事件不在您的控制之下。

最初不加载Servlet。Servlet在应用程序启动后第一次收到调用时被加载

它可以从内存中删除,也可以不从内存中删除。这取决于Servlet容器(如Tomcat/JBoss),这些容器决定Servlet应该在内存中保留多长时间

如果Servlet是idlei.e,那么请求到达的时间太长,容器可能会将其从内存中卸载

但是现在让我们假设卸载后,servlet的另一个请求到达。 然后容器再次将Servlet加载到内存中。这不会影响WebApplication的功能。因为每个请求都在一个单独的线程上被专门处理。没有两个请求是相互依赖的

您无法决定何时在作业任务属于Web容器的内存中卸载或加载Servlet。比如Tomcat/Jboss/Glassfish

这就是为什么您有ServletRequestListner、ServletResponseListner等侦听器,它们可以在创建和销毁Servlet/Request/Response对象等事件时帮助您做一些事情,因为这些事件不在您的控制之下。

HttpServlet有一个销毁功能,它是从GenericServlet获取的

在Servlet生命周期结束时调用destroy方法

之后,servlet对象被标记为垃圾收集

正如@Oliver所说,由容器决定何时调用destroy方法并将Servlet标记为垃圾收集

请参考此答案,了解调用servlet destroy方法的原因

希望有帮助

HttpServlet具有从GenericServlet获取的销毁

在Servlet生命周期结束时调用destroy方法

之后,servlet对象被标记为垃圾收集

正如@Oliver所说,由容器决定何时调用destroy方法并将Servlet标记为垃圾收集

请参考此答案,了解调用servlet destroy方法的原因

希望有帮助

tl;博士 根据,您可以随意加载和卸载。 没什么好担心的。只需知道,当请求到达时,Servlet的实例将始终被加载并准备就绪。其余的由容器决定。 规格 Servlet的生命周期在Javaservlet规范中有详细说明。有关版本4,请参阅。本文档将由取代,但该规范目前为空白,只有封面和许可证声明

加载servlet ➥ servlet容器可以选择在第一个请求到达之前加载servlet。或者,当第一个请求到达时,容器可以等待,直到需要

第2.3节*Servlet生命周期,第2.3.1小节加载和实例化内容如下:

servlet容器负责加载和实例化servlet。加载和实例化可以在容器启动时发生,也可以延迟到容器确定需要servlet来服务请求时发生

启动servlet引擎时,servlet容器必须找到所需的servlet类。servlet容器使用普通Java类加载工具加载servlet类。加载可能来自本地文件系统,远程 e文件系统或其他网络服务

加载Servlet类后,容器实例化它以供使用

结束servlet ➥ servlet容器可以选择在任何时间内保持servlet加载。servlet可能会持续加载,也可能在空闲或内存不足时终止

如果在结束servlet之后,新请求到达,servlet容器将再次加载servlet。没问题

引用规范第2.3.4节服务结束:

servlet容器不需要在任何特定时间段内保持servlet的加载。servlet实例可以在servlet容器中保持活动状态达毫秒,在servlet容器的生命周期内保持活动状态,该生命周期可以是几天、几个月或几年,也可以是其间的任意时间

当servlet容器决定从服务中删除servlet时,它调用servlet接口的destroy方法,以允许servlet释放它正在使用的任何资源并保存任何持久状态。例如,当容器希望节省内存资源或关闭时,它可能会这样做

在servlet容器调用destroy方法之前,它必须允许当前在servlet的服务方法中运行的任何线程完成执行,或者超过服务器定义的时间限制

一旦对servlet实例调用了destroy方法,容器可能不会将其他请求路由到该servlet实例。如果容器需要再次启用servlet,则必须使用servlet类的新实例来启用

销毁方法完成后,servlet容器必须释放servlet实例,使其符合垃圾收集的条件

别担心,要快乐 关于你的观点:

servlet处理请求后,会立即对其进行垃圾收集吗?或者,它会在等待后续请求的情况下再活一段时间吗

如果一个servlet立即死亡,那么接下来的请求就很遗憾了

如果servlet存在很长时间,那么它可能会浪费资源

…这是Servlet容器的业务。你不用担心。作为一名Servlet程序员,您需要知道的是,当用户的请求到达时,Servlet的一个实例将被加载并准备就绪。其余的由容器来管理

发明JavaServlet规范的全部目的就是将您从这些担忧中解放出来。让容器运行该节目使编写Javaservlet变得相对简单,是将“let”放在“Servlet”中的原因。您并不是在编写一个完整的服务器,而是一个适合已经运行的更大的服务器的一小部分功能

您问:有没有办法决定/配置servlet在处于空闲状态后应该存活多长时间

Servlet标准没有指定任何这样的选项,尽管每个Servlet容器实现都可以自由地提供标准要求之外的特性。研究特定servlet容器的文档。

tl;博士 根据,您可以随意加载和卸载。 没什么好担心的。只需知道,当请求到达时,Servlet的实例将始终被加载并准备就绪。其余的由容器决定。 规格 Servlet的生命周期在Javaservlet规范中有详细说明。有关版本4,请参阅。本文档将由取代,但该规范目前为空白,只有封面和许可证声明

加载servlet ➥ servlet容器可以选择在第一个请求到达之前加载servlet。或者,当第一个请求到达时,容器可以等待,直到需要

第2.3节*Servlet生命周期,第2.3.1小节加载和实例化内容如下:

servlet容器负责加载和实例化servlet。加载和实例化可以在容器启动时发生,也可以延迟到容器确定需要servlet来服务请求时发生

启动servlet引擎时,servlet容器必须找到所需的servlet类。servlet容器使用普通Java类加载工具加载servlet类。加载可以来自本地文件系统、远程文件系统或其他网络服务

加载Servlet类后,容器实例化它以供使用

结束servlet ➥ servlet容器可以选择在任何时间内保持servlet加载。servlet可能会持续加载,也可能在空闲或内存不足时终止

如果在结束servlet之后,新请求到达,servlet容器将再次加载servlet。没问题

引用规范第2.3.4节服务结束:

servlet容器不需要在任何特定时间段内保持servlet的加载。servlet实例 可以在servlet容器中保持活动状态达毫秒,在servlet容器的生命周期内保持活动状态,可以是数天、数月或数年,也可以是其间的任意时间

当servlet容器决定从服务中删除servlet时,它调用servlet接口的destroy方法,以允许servlet释放它正在使用的任何资源并保存任何持久状态。例如,当容器希望节省内存资源或关闭时,它可能会这样做

在servlet容器调用destroy方法之前,它必须允许当前在servlet的服务方法中运行的任何线程完成执行,或者超过服务器定义的时间限制

一旦对servlet实例调用了destroy方法,容器可能不会将其他请求路由到该servlet实例。如果容器需要再次启用servlet,则必须使用servlet类的新实例来启用

销毁方法完成后,servlet容器必须释放servlet实例,使其符合垃圾收集的条件

别担心,要快乐 关于你的观点:

servlet处理请求后,会立即对其进行垃圾收集吗?或者,它会在等待后续请求的情况下再活一段时间吗

如果一个servlet立即死亡,那么接下来的请求就很遗憾了

如果servlet存在很长时间,那么它可能会浪费资源

…这是Servlet容器的业务。你不用担心。作为一名Servlet程序员,您需要知道的是,当用户的请求到达时,Servlet的一个实例将被加载并准备就绪。其余的由容器来管理

发明JavaServlet规范的全部目的就是将您从这些担忧中解放出来。让容器运行该节目使编写Javaservlet变得相对简单,是将“let”放在“Servlet”中的原因。您并不是在编写一个完整的服务器,而是一个适合已经运行的更大的服务器的一小部分功能

您问:有没有办法决定/配置servlet在处于空闲状态后应该存活多长时间


Servlet标准没有指定任何这样的选项,尽管每个Servlet容器实现都可以自由地提供标准要求之外的特性。研究特定servlet容器的文档。

live?根据定义,Servlet是线程不安全的资源,因此它在所有会话中对该Servlet的所有请求中共享/重用。它与web应用程序的寿命一样长—直到ServletContext本身被销毁/脱粒。居住根据定义,Servlet是线程不安全的资源,因此它在所有会话中对该Servlet的所有请求中共享/重用。它与web应用程序的寿命一样长—直到ServletContext本身被销毁/脱粒。感谢您对ServletRequestListener类的解释。不太正确:容器可能会选择在第一个请求到达之前加载servlet。Servlet 4规范,第2.3.1节Servlet生命周期>加载和实例化说明:加载和实例化可以在容器启动时发生,也可以延迟到容器确定需要Servlet来服务请求时发生。@BasilBourque它实际上取决于容器实现。您可能在启动时加载的某些容器中看到了此配置。这会在部署WebApp后立即加载servlet。感谢您解释ServletRequestListener类。不太正确:容器可能会选择在第一个请求到达之前加载servlet。Servlet 4规范,第2.3.1节Servlet生命周期>加载和实例化说明:加载和实例化可以在容器启动时发生,也可以延迟到容器确定需要Servlet来服务请求时发生。@BasilBourque它实际上取决于容器实现。您可能在启动时加载的某些容器中看到了此配置。这将在部署WebApp后立即加载servlet。