Why is contextInitialized() called multiple times?
I'm running a Stripes web app on Jboss 4.2.3开发者_如何学运维.GA and am trying to call a method when I start JBoss. I created a ServletContextListener like so:
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) {
}
}
and I added an entry in web.xml like so:
<listener>
<listener-class>com.lawless.web.servletContextListeners.TimerContextListener</listener-class>
</listener>
but contextInitialized() is getting called 3 times when I start my server. Any idea what the issue could be? Thanks.
Ok I figured it out. It was being called 3 times because I had 3 virtual hosts defined in my jboss-web.xml. Not sure why it causes that behavior though. If anyone can explain the reason I would appreciate it.
There will be only one ServletContext
for each web application. ServletContext
will be created while deploying the application (3 Virtual Hosts means deploying to 3 different hosts with 3 different IP addresses). Once the ServletContext
is created, it will be used by all the servlets and JSP files in the same application. ServletContext
is also called as the application scope variables in the web application scenario.
Source - http://www.javabeat.net/2009/02/servletcontextlistener-example/
精彩评论