Servlets 我们应该从Servlet中的init()和service()方法调用destroy()方法吗?

Servlets 我们应该从Servlet中的init()和service()方法调用destroy()方法吗?,servlets,lifecycle,Servlets,Lifecycle,我们应该从Servlet中的init()和service()方法调用destroy()方法吗?我在博客上得到了很多令人困惑的答案 据我所知,当我们从init()调用destroy()方法时,如果我们要覆盖servlet中的destroy(),它应该调用并销毁servlet。然后servlet将被销毁 上述理解正确吗?所有这些都不正确 servlet的destroy()方法仅在关闭时由容器调用。在容器关闭期间,所有servlet都将被销毁。您不应该自己调用该方法。destroy()。例如,关闭在i

我们应该从Servlet中的
init()
service()
方法调用
destroy()
方法吗?我在博客上得到了很多令人困惑的答案

据我所知,当我们从
init()
调用
destroy()
方法时,如果我们要覆盖servlet中的
destroy()
,它应该调用并销毁servlet。然后servlet将被销毁

上述理解正确吗?

所有这些都不正确

servlet的
destroy()
方法仅在关闭时由容器调用。在容器关闭期间,所有servlet都将被销毁。您不应该自己调用该方法。
destroy()。例如,关闭在
init()期间打开的一些外部资源

例如


当您没有任何东西需要清理时,您不一定需要实现该方法。

在java servlet中,程序员不应该调用
destroy()
方法。但是,如果它被调用,它就会被执行。但主要的问题是,servlet会被销毁吗?不,不会的
destroy()
方法不会销毁java servlet。当web容器出于任何原因(比如服务器重启)要销毁servlet时,它只是被调用的方法(我们可以说是事件)


但是,如果您自己调用
destroy()
方法,则只会执行内容,然后继续相应的过程。对于这个问题,执行
destroy()
,然后完成servlet初始化。

这是servlet生命周期的理想场景。如果我将错误地从服务调用destroy方法,那么发生了什么呢?那么,该方法中的代码将像其他方法一样以通常的Java方式执行。servlet不会被销毁或其他什么。容器是唯一在关闭期间调用
destroy()
方法后执行此操作的容器。非常感谢您的确认
private SomeExternalResource someExternalResource;

@Override 
public void init() {
    someExternalResource = new SomeExternalResource();
}

@Override
public void destroy() {
    someExternalResource.close();
}