如何在eclipse中调用servlet中的destroy()?

时间:2015-08-06 08:25:59

标签: java servlets destroy servlet-listeners

当我关闭服务器时,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方法?

4 个答案:

答案 0 :(得分:3)

当你突然终止整个Java虚拟机时,它不会被调用。即当您按下Eclipse的控制台选项卡中的红色方块按钮时。

enter image description here

当您轻轻停止或重新启动服务器本身时,将调用它。即当您按下Eclipse的服务器选项卡中的红色方块按钮时。

enter image description here

答案 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)

当您停止应用程序中正在运行的服务器时,

destroy方法会自动调用。 在我使用tomcat的应用程序中,因此当我停止服务器时,它会自动调用destroy方法。

enter image description here