在Eclipse中,仅当您正常关闭应用程序时,才会调用destroy()
。如果使用停止按钮将其杀死,或者如果您断开计算机的电源,则不会调用destroy()
。
当我关闭服务器时,Eclipse中不调用destroy()。
public class Demo extends GenericServlet {
public void init(ServletConfig config) throws ServletException{
System.out.println("intit intialized");
}
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("servicccceeeeeeeee method........");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<h1>service method</h1>");
out.close();
}
public void destroy() {
System.out.printlnln(".........destroy method invoked.......");
}
}
何时以及如何调用destroy方法?
当您突然完全终止整个Java虚拟机时,将不会调用它。即当您在Eclipse的Console选项卡中按红色正方形按钮时。
当您轻轻停止或重新启动服务器本身时,将调用它。即当您在Eclipse的服务器
选项卡中按红色正方形按钮时。在Eclipse中,仅当您正常关闭应用程序时,才会调用destroy()
。如果使用停止按钮将其杀死,或者如果您断开计算机的电源,则不会调用destroy()
。
现在有关方法本身的更多信息:
Servlet.destroy()的javadoc说:
由servlet容器调用,以向servlet指示该servlet正在退出服务。
仅在servlet的service方法中的所有线程都已退出或经过超时时间后,才调用此方法。 Servlet容器调用此方法后,它将不再在该Servlet上再次调用service方法。此方法使Servlet有机会清理所持有的任何资源(例如,内存,文件句柄,线程),并确保任何持久状态都与Servlet在内存中的当前状态同步。
它没有指定什么情况会导致servlet被“退出服务”,这只是一个事件,您可以根据需要对其进行反应。因此,在destroy中,如果有任何要清除的内容,则应清除Servlet,可以存储Servet的状态,并记录错误。例如,可能由于服务器内存不足而发生。
destroy()
方法在从服务中删除servlet
实例之前由容器调用,并为servlet
提供了清除所持有的任何资源(例如,内存,文件句柄,线程)的机会,并确保持久状态与内存中的servlet's
当前状态同步。
destroy()
和init()
方法在Servlet的生命周期中仅被调用一次,而service()
方法可被多次调用。 destory()
将被称为:
1。当容器关闭或应用程序关闭时;
2。当容器确定内存不足时;
3。当此Servlet很长时间没有请求。
在servlet容器调用此方法之后,它将不再在该servlet上再次调用service方法。
在Eclipse中,仅当您正常关闭应用程序时,才会调用destroy()
。如果使用停止按钮将其杀死,或者如果您断开计算机的电源,则不会调用destroy()
。
destroy()
方法在从服务中删除servlet
实例之前由容器调用,并为servlet
提供了清除所持有的任何资源(例如,内存,文件句柄,线程)的机会,并确保持久状态与内存中的servlet's
当前状态同步。
销毁方法在您停止应用程序中正在运行的服务器时自动调用。在我使用tomcat的应用程序中,因此当我停止服务器时,它会自动调用destroy方法。