10

我在 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 次。知道问题可能是什么吗?谢谢。

4

2 回答 2

9

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

于 2010-08-23T01:01:28.620 回答
8

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

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

于 2012-06-20T14:56:36.363 回答