0

次のような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() メソッドがあることを望んでいましたが、ありません。

これを行うためのきれいな方法はありますか?

4

0 に答える 0