当我关闭服务器时,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方法?
答案 0 :(得分:3)
当你突然终止整个Java虚拟机时,它不会被调用。即当您按下Eclipse的控制台选项卡中的红色方块按钮时。
当您轻轻停止或重新启动服务器本身时,将调用它。即当您按下Eclipse的服务器选项卡中的红色方块按钮时。
答案 1 :(得分:2)
在Eclipse中,只有在您正常关闭应用程序时才会调用destroy()
。如果您使用停止按钮终止它,或者如果您拔掉计算机的电源,则不会调用destroy()
。
现在更多关于方法本身:
Servlet.destroy()的javadoc说:
由servlet容器调用,以向servlet指示servlet正在停止服务。
只有在servlet的服务方法中的所有线程都退出或超时时间过后,才会调用此方法。在servlet容器调用此方法之后,它不会再在此servlet上调用服务方法。 此方法使servlet有机会清除所有正在保留的资源(例如,内存,文件句柄,线程),并确保任何持久状态与servlet在内存中的当前状态同步。
它没有指定哪些情况会导致servlet“停止服务”,它只是一个事件,如果需要,您可以对此做出反应。所以在破坏中你应该清理你的Servlet,如果有什么需要清理,你可以存储Servet的状态,也许记录错误。例如,可能会发生这种情况,因为服务器内存不足。
答案 2 :(得分:1)
在从服务中删除destroy()
实例之前,容器会调用servlet
方法,并为servlet
提供清理所有资源的机会(例如,内存,文件句柄,线程)并确保任何持久状态与内存中的servlet's
当前状态同步。
destroy()
和init()
方法在servlet的生命周期中只调用一次,而service()
方法可以多次调用。将调用destory()
:
1.当容器关闭或应用程序关闭时;
2.当容器决定内存不足时
3.当这个servlet长时间没有收到请求时。
在servlet容器调用此方法之后,它不会再在此servlet上调用服务方法。
答案 3 :(得分:0)