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

Tom*_*ant 9 java jboss stripes servlets

我正在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) {

    }
}
Run Code Online (Sandbox Code Playgroud)

我在web.xml中添加了一个条目,如下所示:

<listener>
        <listener-class>com.lawless.web.servletContextListeners.TimerContextListener</listener-class>
    </listener>
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*ant 7

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


Aja*_*jay 7

ServletContext每个Web应用程序只有一个.ServletContext将在部署应用程序时创建(3个虚拟主机意味着部署到3个不同的主机,具有3个不同的IP地址).一旦ServletContext创建,它将被同一应用程序中的所有servlet和JSP文件使用.ServletContext也称为Web应用程序方案中的应用程序范围变量.

来源 - http://www.javabeat.net/2009/02/servletcontextlistener-example/