Java 为什么多次调用contextInitialized()?

Java 为什么多次调用contextInitialized()?,java,servlets,jboss,stripes,Java,Servlets,Jboss,Stripes,我正在JBoss4.2.3.GA上运行一个Stripes web应用程序,并试图在启动Jboss时调用一个方法。我创建了一个ServletContextListener,如下所示: public class TimerContextListener implements ServletContextListener { @Inject private TimerManager timerManager; public void contextInitialized(S

我正在JBoss4.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>

com.lawless.web.servletContextListeners.TimerContextListener

但是当我启动服务器时,contextInitialized()被调用了3次。你知道问题是什么吗?谢谢。

好的,我知道了。它被调用了3次,因为我在jboss-web.xml中定义了3个虚拟主机。但不知道为什么会导致这种行为。如果有人能解释原因,我将不胜感激。

每个web应用程序只有一个
ServletContext
<部署应用程序时将创建code>ServletContext(3个虚拟主机意味着部署到具有3个不同IP地址的3个不同主机)。一旦创建了
ServletContext
,同一应用程序中的所有servlet和JSP文件都将使用它
ServletContext
在web应用程序场景中也称为应用程序范围变量


Source-

contextInitialized
的顶部放置一个基本的
System.out.println
,以确保看到的是您认为看到的内容。顺便说一句,我看到了这种问题:将Tomcat连接到NetBeans以用于开发时出现的一个已知错误导致了错误。