我面临一个问题ServletContextAttributeListener
。
我有一个小型 Java 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){
}
}
我在部署描述符中声明了我的监听器,如下所示:
<listener>
<listener-class>com.example.listener.MyServletContextAttributeListener</listener-class>
</listener>
然后在servlet
其中实现了一个ServletContextListener
(因为我希望它在应用程序的部署时执行)我在以下设置一个属性ServletContext
:
public class DatabaseInitializer implements ServletContextListener{
public void contextInitialized(ServletContextEvent event){
...
event.getServletContext().setAttribute("databaseConnection", connection);
...
}
}
我还在ServletContextListener
部署描述符中声明了 。
问题是当我在 中启动我的应用程序时Apache Tomcat
,该attributeAdded
方法执行了两次。当我删除 ServletContextListener 时,该attributeAdded
方法运行一次。
有人可以解释我为什么吗?以及如何让我的 ServletContextListener 和我的 ServletContextAttributeListener 都在我的 Deployement Descriptor 中声明而没有这种奇怪的行为?