我正在Jboss 4.2.3.GA上运行Stripes Web应用程序,并且在我启动JBoss时尝试调用方法。我像这样创建了一个ServletContextListener:
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>
但是当我启动服务器时,contextInitialized()被调用了3次。知道问题是什么吗?感谢。
答案 0 :(得分:7)
好的我明白了。它被调用了3次,因为我在jboss-web.xml中定义了3个虚拟主机。不知道为什么它会导致这种行为。如果有人能解释我会很感激的原因。
答案 1 :(得分:6)
每个Web应用程序只有一个ServletContext
。部署应用程序时将创建ServletContext
(3个虚拟主机意味着部署到具有3个不同IP地址的3个不同主机)。创建ServletContext
后,它将被同一应用程序中的所有servlet和JSP文件使用。 ServletContext
也称为Web应用程序方案中的应用程序范围变量。
来源 - http://www.javabeat.net/2009/02/servletcontextlistener-example/