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

时间:2011-05-25 17:13:08

标签: servlets lifecycle

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

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

上述理解是对吗?

2 个答案:

答案 0 :(得分:12)

一切都不是真的。

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

E.g。

private SomeExternalResource someExternalResource;

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

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

当您无需清理时,您不一定需要实施该方法。

答案 1 :(得分:0)

在Java Servlet中,程序员不应调用destroy()方法。但是,如果调用它,它将被执行。但是主要的问题是,servlet是否会被破坏?不,不会。 destroy()方法不会破坏Java Servlet。这只是当Web容器由于任何原因(例如服务器重启)而要破坏Servlet时调用的方法(可以说是一个事件)。

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