サーブレットにおいてリクエストを受ける前に、1回だけ特定の処理を行いたい時があると思います。サーブレットのスーパークラスであるjavax.servlet.http.HttpServletクラス(実際はjavax.servlet.GenericServletクラス)には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インタフェースの初期化パラメータ関連メソッド
メソッド | パラメータ型 | 説明 | 戻り値型 |
---|---|---|---|
getInitParameter | String | 初期化パラメータの値を取得する | 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.