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