ServletContextAttributeListener的attributeAdded方法在同一个Web应用程序中同时使用ServletContextListener时执行两次

时间:2013-05-28 21:32:33

标签: java-ee deployment-descriptor servletcontextlistener

我遇到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都没有出现这种奇怪的行为?

0 个答案:

没有答案