为什么contextInitialized()称为多次?
题
我正在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/
不隶属于 StackOverflow