#servlets #servletcontextlistener
#сервлеты #servletcontextlistener
Вопрос:
Является ли хорошей практикой расширение HttpServlet
и реализация класса ServletContextListener
?
public Myclass extends HttpServlet implements ServletcontextListener {
}
Каковы плюсы и минусы этого?
Ответ №1:
Некоторые мысли:
- У вас будет как минимум два экземпляра вашего класса. Контейнер создает один as
ServletContextListener
и, по крайней мере, один asHttpServlet
, когда ваш сервлет получает входящий запрос. - Начиная с экземпляров 2 , вы не можете использовать экземпляры (только статические) для обмена данными.
- Проще, если другие классы не используют данные / объекты, которые вы инициализируете и передаете в прослушиватель, потому что вам не нужно помещать эти данные / объекты в область приложения в
ServletContextListener
и извлекать их вHttpServlet
. - Если ваша логика инициализации сложна, возможно, стоит отделить ее от кода сервлета (например, поместить код инициализации в другой класс и использовать область применения для получения общих объектов в сервлете).
Ответ №2:
Все зависит от вас, разработчика. ServletContextListener имеет свое особое назначение. Убедитесь, что вы знаете, для чего это нужно, прежде чем использовать его.
В случае, если вы создаете HTTP-сервлет, вы должны расширить HttpServlet.Если ваш класс хочет «получать уведомления об изменениях в контексте сервлета веб-приложения» (скопировано из javadocs), частью которого он является, вы должны реализовать ServletContextListener.