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

#java #web-services #servlets #jax-ws

#java #веб-сервисы #сервлеты #jax-ws

Вопрос:

Я разработал веб-сервис с использованием JAX-WS и в web.xml у меня был зарегистрирован этот прослушиватель контекста сервлета.

 <listener>
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
  

Но теперь у меня есть определенная функция, которую нужно выполнять, когда веб-служба запущена и когда веб-служба ОТКЛЮЧЕНА. Единственный способ, который я мог придумать, это создать ServletContextlistener и добавить его в web.xml .

Но это переопределило бы тот, который был указан (как показано выше <listener> тега).

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

Я пытался расширить WSServletContextListener класс, но его окончательный вариант так и не удалось. Другой способ заключается в том, что я могу использовать WSServletContextListener в качестве элемента экземпляра в моем классе listener и переносить все предоставляемые им методы. Но хорошая ли это практика?

Ответ №1:

Создайте свой собственный прослушиватель и объявите его в новом <listener>..</listener> теге. Два прослушивателя должны вызываться в том порядке, в котором они указаны web.xml.

Ответ №2:

Вы можете объявить несколько прослушивателей, они будут вызываться в том порядке, в котором они определены web.xml :

 <listener>
   <listener-class>com.example.First</listenerclass>
</listener>
<listener>
   <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<listener>
   <listener-class>com.example.Last</listener-class>
</listener>