次のようなWebサービスがあります。
- /ユーザー
- /投稿
- /フラグ
もちろん、それぞれがサーブレットです。
- ユーザーサーブレット.java
- PostsServlet.java
- FlagsServlet.java
共通のモデル (最終的に外部データベースを呼び出すいくつかのメソッドを持つクラス) を共有する必要があるため、それを別のファイル MyListener.java に入れます。
public class MyListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
IModel model = ...
event.getServletContext().setAttribute("model", model);
...
}
...
}
そして、各サーブレットの init で、そのモデルを取得します。
@WebServlet("/users")
public class UsersServlet extends Servlet {
UsersModelFacade usersModel;
public void init() throws ServletException {
super.init();
IModel model = (IModel)getServletContext().getAttribute("model");
usersModel = new UsersModelFacade(model);
}
...
}
しかし今、サーブレットコンテキストの「モデル」属性を固定したくないので、 removeAttribute() したいのです。
3 つのサーブレットの初期化が完了したら、removeAttribute() を呼び出す必要があります。オーバーライドできる ServletContextListener に allServletsInitialized() メソッドがあることを望んでいましたが、ありません。
これを行うためのきれいな方法はありますか?