HttpServletを継承する私のwebappのコントローラクラスを作成しました。web.xmlでHttpServletを初期化する方法
public abstract class BaseController extends HttpServlet {
protected ClientsProvider clientsProvider;
@Override
public void init() throws ServletException {
clientsProvider = (ClientsProvider) getServletContext().getAttribute(
"clientsProvider");
if (clientsProvider == null) {
clientsProvider = new ClientsProvider();
getServletContext().setAttribute("clientsProvider", clientsProvider);
}
super.init();
}
CommonsProviderは、私がこのプロジェクトで使用したすべてのクライアントを初期化した別のクラスです。
ここで、このようなinit()コードをここに記述するのではなく、init()作業を行うためにweb.xmlを使用します。このように:
<servlet>
<servlet-name>BaseController</servlet-name>
<servlet-class>myproject.controller.BaseController</servlet-class>
<load-on-startup>1</load-on-startup>
<context-param>
<param-name>clientsProvider</param-name>
<param-value>clientsProvider</param-value>
</context-param>
</servlet>
param値が設定されていないため、上記のコードは機能しません。私がparam-valueで必要とするのは、新しいClientsProvider()オブジェクトです。この場合、web.xmlでinit()を実行することはできますか?ありがとう!
web.xmlでその宣言を行うことはできませんが、そのようなクロスカッティングに関するライフサイクルリスナーまたはフィルタを使用できます。 DIフレームワークも同じメカニズムを使用します。 – eckes