2015-08-06 3 views
2

Когда я завершаю сервер, destroy() не вызывается в Eclipse.Как вызвать destroy() в сервлет из eclipse?

public class Demo extends GenericServlet { 

    public void init(ServletConfig config) throws ServletException{ 
     System.out.println("intit intialized"); 
    } 

    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 
     System.out.println("servicccceeeeeeeee method........"); 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 

     out.print("<h1>service method</h1>"); 
     out.close(); 
    } 

    public void destroy() { 
     System.out.printlnln(".........destroy method invoked......."); 
    } 

} 

Когда и как я могу назвать метод уничтожения?

+0

т.к. OP непонятно о проблеме. давая один проголосовавший –

ответ

3

Он не будет вызываться, когда вы внезапно завершите завершите всю виртуальную машину Java. То есть когда вы нажимаете красную квадратную кнопку в Eclipse Консоль tab.

enter image description here


Он будет вызываться, когда вы мягко остановить или перезапустить сам сервер. То есть когда вы нажимаете кнопку красного квадрата на серверах Eclipse .

enter image description here

2

В Eclipse destroy() вызывается только в том случае, если вы изящно закрыли приложение. Если вы убьете его кнопкой остановки или отключите питание компьютера, то destroy() не будет вызываться.


А теперь подробнее о самом методе:

Servlet.destroy() «s Javadoc говорит:

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

Этот метод вызывается только после того, как все потоки в методе службы сервлета вышли или после истечения периода ожидания. После того, как контейнер сервлетов вызовет этот метод, он снова не вызовет метод службы на этом сервлете. Этот метод дает сервлету возможность очищать любые ресурсы, которые хранятся (например, память, дескрипторы файлов, потоки) и следить за тем, чтобы какое-либо постоянное состояние синхронизировалось с текущим состоянием сервлета в памяти.

В нем не указывается, какие ситуации могут привести к «выходу из службы сервлета», это просто событие, на которое вы можете реагировать, если вам нужно. Поэтому в уничтожении вы должны очистить свой сервлет, если есть что-то для очистки, вы можете сохранить состояние Servet и, возможно, зарегистрировать ошибку. Это может произойти, например, из-за нехватки памяти на сервере.

+0

Нападение() будет называться: когда контейнер выключается или приложение выключается; , когда контейнер принимает решение о нехватке памяти; , когда этот сервлет не получил запрос в течение длительного времени. почему в моей программе не называется destroy() в eclipse ....... можете ли вы рассказать мне пример с помощью этого кода ... –

+0

Никто не говорит, что destroy() вызывается, когда сервер выключен. Почему вы думаете, что этот метод должен быть вызван в этом случае? Он вызывается в случае сбоя какой-либо нити, происходит некоторая ошибка, этот сервлет становится недоступным ... – darijan

+0

кто-то говорит ... destroy() вызывается, когда сервер выключен..Но это невозможно в этой программе .. спасибо за ответил –

1

Метод destroy() вызываются контейнером перед удалением servlet экземпляра от службы и дает servlet возможность очистить любые ресурсы, которые проводятся (например, память, дескрипторы файлов, потоки) и убедитесь, что любое постоянное состояние синхронизируется с текущим состоянием servlet's в памяти.

Методы destroy() и init() вызываются только один раз в течение срока службы сервлетов, а метод service() может быть вызван несколько раз. destory() будет называться:

1.когда контейнер выключается или приложение закрывается;

2.когда контейнер решает, что существует нехватка памяти;

3.если этот сервлет не получил запрос в течение длительного времени.

После того, как контейнер сервлетов вызовет этот метод, он не будет снова вызывать метод службы на этом сервлете.

+0

Он отлично работает в затмении .. спасибо за ценные ответы. –

+0

вы можете принять ответ, если он разрешил вашу проблему :):) @ anandkumar –

+0

не могли бы вы объяснить мне причину не принимать ответ после его принятия. @anandkumar –

Смежные вопросы