Расширение HttpServlet реализация ServletContextListener

#servlets #servletcontextlistener

#сервлеты #servletcontextlistener

Вопрос:

Является ли хорошей практикой расширение HttpServlet и реализация класса ServletContextListener ?

 public Myclass extends HttpServlet implements ServletcontextListener {
}
  

Каковы плюсы и минусы этого?

Ответ №1:

Некоторые мысли:

  • У вас будет как минимум два экземпляра вашего класса. Контейнер создает один as ServletContextListener и, по крайней мере, один as HttpServlet , когда ваш сервлет получает входящий запрос.
  • Начиная с экземпляров 2 , вы не можете использовать экземпляры (только статические) для обмена данными.
  • Проще, если другие классы не используют данные / объекты, которые вы инициализируете и передаете в прослушиватель, потому что вам не нужно помещать эти данные / объекты в область приложения в ServletContextListener и извлекать их в HttpServlet .
  • Если ваша логика инициализации сложна, возможно, стоит отделить ее от кода сервлета (например, поместить код инициализации в другой класс и использовать область применения для получения общих объектов в сервлете).

Ответ №2:

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

В случае, если вы создаете HTTP-сервлет, вы должны расширить HttpServlet.Если ваш класс хочет «получать уведомления об изменениях в контексте сервлета веб-приложения» (скопировано из javadocs), частью которого он является, вы должны реализовать ServletContextListener.