如何从Eclipse中调用Servlet中的destroy()?

问题描述 投票:2回答:4

当我关闭服务器时,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 servlets destroy servlet-listeners
4个回答
5
投票

当您突然完全终止整个Java虚拟机时,将不会调用它。即当您在Eclipse的Console选项卡中按红色正方形按钮时。

enter image description here


当您轻轻停止或重新启动服务器本身时,将调用它。即当您在Eclipse的服务器

选项卡中按红色正方形按钮时。

enter image description here

在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方法。

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

enter image description here


2
投票

在Eclipse中,仅当您正常关闭应用程序时,才会调用destroy()。如果使用停止按钮将其杀死,或者如果您断开计算机的电源,则不会调用destroy()


1
投票

destroy()方法在从服务中删除servlet实例之前由容器调用,并为servlet提供了清除所持有的任何资源(例如,内存,文件句柄,线程)的机会,并确保持久状态与内存中的servlet's当前状态同步。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.