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

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

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

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

以上理解是对的吗?

servlets lifecycle
2个回答
12
投票

一切都不是真的。

servlet的destroy()方法只有在容器关闭时才被容器调用。在容器关闭期间,所有servlet都将被销毁。你不应该自己调用这个方法。 destroy()方法只是让您有机会在关机时执行一些代码。例如,关闭在init()期间打开的一些外部资源。

EG

private SomeExternalResource someExternalResource;

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

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

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


0
投票

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

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

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