Почему контекстецинициализирован () называется несколько раз?
Вопрос
Я запускаю полосы веб-приложения на JBOSS 4.2.3.ga и пытаюсь вызвать метод, когда я начну jboss. Я создал сервлетконтестенсистенер, как так:
public class TimerContextListener implements ServletContextListener {
@Inject
private TimerManager timerManager;
public void contextInitialized(ServletContextEvent servletcontextevent) {
((Injector) servletcontextevent.getServletContext().getAttribute(GuiceServletContextListener.KEY)).injectMembers(this);
timerManager.stopAllTimers();
timerManager.startTimer();
}
public void contextDestroyed(ServletContextEvent servletcontextevent) {
}
}
И я добавил запись в web.xml, как так:
<listener>
<listener-class>com.lawless.web.servletContextListeners.TimerContextListener</listener-class>
</listener>
Но контективное () вызывается 3 раза, когда я запускаю свой сервер. Есть идеи, что может быть проблема? Спасибо.
Решение
Хорошо, я понял это. Он назывался 3 раза, потому что у меня было 3 виртуальных хоста, определенные в моем jboss-web.xml. Не уверен, почему это вызывает это поведение, хотя. Если кто-то может объяснить причину, что я буду признателен за это.
Другие советы
Там будет только один ServletContext
Для каждого веб-приложения. ServletContext
Будет создан при развертывании приложения (3 виртуальных хоста означает развертывание до 3 разных хостов с 3 разными IP-адресами). Однажды ServletContext
Создан, он будет использоваться всеми файлами сервлетов и JSP в одном и том же приложении. ServletContext
Также называется переменными приложения в сценарии веб-приложений.
Источник - http://www.javabeat.net/2009/02/servletcontextListener-example/