我遇到ServletContextAttributeListener
的问题。
我有一个小型的EE EE Web应用程序,我在其中创建了ServletContextAttribute
:
public class MyServletContextAttributeListener implements ServletContextAttributeListener{
public void attributeAdded(ServletContextAttributeEvent event){
System.out.println("Connection attribute added to ServletContext");
}
public void attributeRemoved(ServletContextAttributeEvent event){
}
public void attributeReplaced(ServletContextAttributeEvent event){
}
}
我在deployement描述符中声明了我的监听器,如下所示:
<listener>
<listener-class>com.example.listener.MyServletContextAttributeListener</listener-class>
</listener>
然后在实现servlet
的{{1}}中(因为我希望它在应用程序的部署时执行)我在ServletContextListener
中设置了一个属性:
ServletContext
我还在Deployement Descriptor中声明了 public class DatabaseInitializer implements ServletContextListener{
public void contextInitialized(ServletContextEvent event){
...
event.getServletContext().setAttribute("databaseConnection", connection);
...
}
}
。
问题是,当我在ServletContextListener
中启动我的应用时,Apache Tomcat
方法会执行两次。当我删除ServletContextListener时,attributeAdded
方法运行一次。
有人可以解释我为什么吗? 如何在我的部署描述符中声明我的ServletContextListener和ServletContextAttributeListener都没有出现这种奇怪的行为?