の問題に直面してい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 の両方を、その奇妙な動作なしで展開記述子で宣言するにはどうすればよいですか?