Правильный способ сделать уборку в сервлете - PullRequest
1 голос
/ 03 апреля 2012

Мне нужно освободить некоторые ресурсы в моем веб-приложении (Tomcat 7).
Я пытаюсь сделать это в destroy моего servlet.
Проблема в том, что когда я делаю getServletContext()в моем destroy ничего не происходит.
При отладке мне удалось увидеть:

java.lang.NullPointerException at javax.servlet.GenericServlet.getServletContext (GenericServlet.java:125)

Исходя из моей строки getSerlvetContext() в методе destroy моего servlet.

Итак, сейчас я понятия не имею, как я должен выполнять очистку в своем веб-приложении.
Я сохранил некоторые ресурсы в ServletContext, чтобы их можно было использовать из любой точки моегоприложение и, насколько я знаю, очистка ресурса должна быть выполнена либо

1) в destroy из servlets или
2) contextDestroyed из ServletContextListener

Но ни один из них, кажется, не работает должным образом.В случае (1) я получаю NullPointerException при попытке доступа к контексту сервлета.
В случае (2) веб-приложение уже закрыто, поэтому, если у меня есть статические методы, ответственные за перераспределение соединений с БД и т. Д. (как я понял проблему) JVM уже выгружен, так как веб-приложение уже закрыто.

Я что-то не так делаю?Что мне делать?

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

Чтобы получить ServletContext, обычный способ - сохранить его в переменной экземпляра.В зависимости от того, расширяете ли вы Servlet или реализуете ServletContextListener, я бы порекомендовал создать переменную экземпляра для контекста и затем сохранить ее одним из следующих методов:

  • ServletContextListener.contextInitialized(ServletContextEvent sce): использоватьsce.getServletContext() для получения ссылки на контекст, который затем можно сохранить в переменной экземпляра.
  • HttpServlet.init(ServletConfig config): вызов метода super (init) с параметром config, чтобы вы моглипозже получите к нему доступ, используя getServletContext().Если это не сработает, вы можете сохранить контекст в переменной экземпляра, используя config.getServletContext().
0 голосов
/ 03 апреля 2012

С Надеждой. На самом деле вам не нужно беспокоиться о процессе очистки процесса приложения TOMCAT / J2EE. Если вы заинтересованы в этом, просто удалите / очистите временный каталог Catalina. Это довольно просто - удалить / очистить все ваши рабочие данные и сделать ваше приложение новым. . На самом деле, когда вы запускаете веб-приложение Tomcat, создайте временный рабочий каталог внутри папки установки. Итак, выполните следующие действия: -

Шаги: -

  1. Останови кота
  2. Перейдите в каталог tomcat (C: \ Program Files \ Apache Software Foundation \ Tomcat 5.5)
  3. Найти рабочую папку и удалить (Shift Delete)

Теперь запустите кота еще раз и наслаждайтесь новым приложением.

Счастливого программирования с TOMCAT. Любой другой следит за моим блогом.

Спасибо

...