2010-08-22 159 views
7

我在Jboss 4.2.3.GA上运行Stripes Web应用程序,并试图在启动JBoss时调用方法。我创建了一个ServletContextListener来,像这样:为什么contextInitialized()被多次调用?

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次,当我开始我的服务器。任何想法可能是什么问题?谢谢。

+1

将基本'System.out.println'你'contextInitialized'的顶部,以确保你所看到的,你认为你所看到的。顺便说一下,我已经看到了这样一个问题:将Tomcat连接到NetBeans以供开发时使用的已知错误会导致[Tomcat双启动Web应用程序](https://stackoverflow.com/q/16702011/642706) 。 – 2017-06-01 22:11:52

回答

5

好吧我想通了。它被称为3次,因为我在jboss-web.xml中定义了3个虚拟主机。不知道为什么它会导致这种行为。如果任何人都可以解释我会欣赏它的原因。

6

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

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

相关问题