0

我面临一个问题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 中声明而没有这种奇怪的行为?

4

0 回答 0