我正在JBOSS 4.2.3.GA上运行条纹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次。知道这个问题可能是什么?谢谢。

有帮助吗?

解决方案

好的,我想出来了。它被称为3次,因为我在jboss-web.xml中定义了3个虚拟主机。不确定为什么会导致这种行为。如果有人能解释原因,我会感谢它。

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top