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メソッドが 2 回実行されることです。ServletContextListener を削除すると、attributeAddedメソッドが 1 回実行されます。

誰かが私に理由を説明できますか? そして、私の ServletContextListener と 私の ServletContextAttributeListener の両方を、その奇妙な動作なしで展開記述子で宣言するにはどうすればよいですか?

4

0 に答える 0