Java Tips: サーブレットの初期化処理を行うには

サーブレットにおいてリクエストを受ける前に、1回だけ特定の処理を行いたい時があると思います。サーブレットのスーパークラスであるjavax.servlet.http.HttpServletクラス(実際はjavax.servlet.GenericServletクラス)にはinitメソッドが用意されており、このメソッドをオーバーライドして初期化処理を行います。

» 2004年08月02日 11時04分 公開
[ITmedia]

initメソッドをオーバーライドするときの注意点

 initメソッドは,サーブレットがサービスを開始できる状態になった際にサーブレットコンテナによって呼び出されるメソッドです。メソッドとしてはパラメータとしてjavax.servlet.ServletConfigオブジェクトを受け取るものと,まったくパラメータを受け取らないものがあります。決まった初期化処理を行うのであれば,パラメータなしのinitメソッドを,なんらかのパラメータを受け取って初期化処理を行う場合はパラメータありのinitメソッドをオーバーライドします。パラメータありのinitメソッドの代わりにinitパラメータなしのinitメソッドをオーバーライドした場合は,GenericServlet#init(ServletConfig)メソッドによって呼び出されます。

 注意点としては,パラメータなしのinitメソッドをオーバーライドする場合はとくに制約はありませんが,パラメータありのinitメソッドをオーバーライドする場合は,次に示すように必ずsuper.initメソッドを呼び出すことです。

public void init(ServletConfig config) throws ServletException {
    super.init(config);
    // 任意の初期化処理
}

初期化に必要なパラメータを受け取るには

 パラメータありのinitメソッドをオーバーライドする場合は,次に示すServletConfigオブジェクトのメソッドを使って初期化パラメータを取得し,利用することができます。

表1 ServletConfigインタフェースの初期化パラメータ関連メソッド

メソッドパラメータ型説明戻り値型
getInitParameterString初期化パラメータの値を取得するString
getInitParameterNamesなし初期化パラメータの名前を列挙するEnumeration

 初期化パラメータは,デプロイメントディスクリプタ(/WEB-INF/web.xml)のservlet要素に記述します。記述する場所は,初期化パラメータを受け取りたいサーブレットを定義したservlet要素の中です。init-param要素の子として,param-name要素とparam-value要素を記述します。次に定義例を示します。

<servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>jp.javadeveloper.test.TestServlet</servlet-class>
    <init-param>
        <param-name>properties</param-name>
        <param-value>/WEB-INF/param.properties</param-value>
    </init-param>
</servlet>

 この例では,TestServletの初期化パラメータとして,propertiesという名前で/WEB-INF/param.propertiesという値を記述しています。この初期化パラメータを受け取るには,

public void init(ServletConfig config) throws ServletException {
    super.init(config);
    String value = config.getInitParameter("properties");
    // valueを使ってプロパティファイルを読み込み
}

 なお,initメソッドで受け取ったServletConfigオブジェクトは,HttpServlet#getServletConfigメソッドを使うことでいつでも参照することが可能です。

 「JAVA Developer」より毎週役立つJava Tipsを配信中。ほかにも参考になるTipsは、JAVA Developerサイトのバックナンバーから探すことが可能です。

Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.

注目のテーマ