因此,在我正在开发的应用程序(Spring-boot)中,我需要挖掘servlet上下文正在初始化的点。所以为此,我使用了下面的代码(请参阅注释“OLD-CODE-BELOW”之后的代码)。程序运行良好,所有事情都很好,并且在开发环境中,即在我的日食之下。
但是部署代码时,在apache tomcat服务器上使用WAR,方法contextInitialized(ServletContextEvent event)
运行了两次!
(使用maven Target
之后clean install
文件夹中生成的war来部署应用程序。
所以,我找到了解决方案(未注释的代码)。但我从来不明白这背后的原因。
import javax.servlet.ServletContextEvent;
import javax.annotation.ManagedBean;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebListener;
import com.utilities.DriverPool;
import org.openqa.selenium.WebDriver;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import java.util.ArrayList;
@ManagedBean
public class AppContextListener implements ServletContextInitializer{
@Override
public void onStartup(ServletContext sc) throws ServletException {
// TODO Auto-generated method stub
DriverPool dPool = new DriverPool();
ArrayList<WebDriver> driverList = dPool.createInitPool();
sc.setAttribute("driverPool", driverList);
System.out.println("ServletContextListener started..***************************************************");
}
}
//-----OLD-CODE-BELOW----------//
/*@WebListener
public class AppContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext sc = event.getServletContext();
DriverPool dPool = new DriverPool();
ArrayList<WebDriver> driverList = dPool.createInitPool();
sc.setAttribute("driverPool", driverList);
System.out.println("ServletContextListener started..***************************************************");
}
@Override
public void contextDestroyed(ServletContextEvent e) {
}
}*/
另外,我在Main类(spring-boot应用程序启动的地方)中有这个代码,我后来注释掉了。
/*@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
System.out.println("in onStartup");
servletContext.addListener(new AppContextListener());
//Adds custom context listener for initialization of driver pool and other functionality
}*/
所以,我真的很想知道为什么会这样。
PS:我对此并不是很专家,所以请原谅任何错误, AND ,如果需要,请在评论中提及其他详细信息。非常感谢!