Должны ли мы вызывать метод destroy () из методов init () и service () в сервлете? - PullRequest
5 голосов
/ 25 мая 2011

Должны ли мы вызывать метод destroy() из init() и service() методов в сервлете?Я получил много запутанных ответов в блогах.

Насколько я понимаю, когда мы вызываем метод destroy() из init(), он должен вызывать и уничтожать сервлет, если мы собираемся переопределить destroy() в нашем сервлете.Тогда сервлет будет уничтожен.

Верно ли вышеупомянутое понимание?

Ответы [ 2 ]

12 голосов
/ 25 мая 2011

Ничто не является правдой.

Метод сервлета destroy() вызывается контейнером только тогда, когда он будет остановлен. Во время остановки контейнера все сервлеты будут уничтожены. Вы не должны вызывать метод самостоятельно. Метод destroy() просто предлагает вам возможность выполнить некоторый код при завершении работы. Например, закрыть некоторые внешние ресурсы, которые были открыты во время init().

1008 * Е.Г. *

private SomeExternalResource someExternalResource;

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

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

Вам не обязательно реализовывать метод, когда вам нечего убирать.

0 голосов
/ 15 февраля 2019

В Java-сервлете метод destroy() не должен вызываться программистом. Но, если он вызывается, он исполняется. Но главный вопрос в том, будет ли уничтожен сервлет? Нет, не будет. destroy() метод не уничтожит Java-сервлет. Это просто метод (можно сказать, как событие), который вызывается, когда веб-контейнер собирается уничтожить сервлет по любой причине (например, перезапуск сервера).

Но если вы вызываете метод destroy() самостоятельно, контент просто исполняется, а затем соответствующий процесс продолжается. В соответствии с этим вопросом, destroy() выполняется, и затем инициализация сервлета завершается.

...