これまで、要求パラメータを取得して指定する方法について説明しました。次に、初期化パラメータを使用する例について取り上げます。このセクションでは、初期化パラメータを使用する方法の 1 つと、サーブレットでそれを取得する方法について説明します。
特定の Web ページのアクセス回数を記録するカウンタが必要であると想定します。また、カウンタの値をほかのサーブレット出力と異なるフォント サイズで表示すると想定します。これらのタスクを実行するために、クラスの中に counter と fontSize という 2 つの変数が必要となります。
次のコード例は、初期化パラメータを使用して counter および fontSize を保持する方法を示しています。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class UseInitParms extends HttpServlet {
//既定値
private static final int FONTSIZE = 3;
private static final int COUNTER = 0;
//既定の変数
public static int fontSize;
public static int counter;
// 引数を持たない init メソッドをオーバロードするのが最適です。
public void init () throws ServletException {
if ( getInitParameter("fontSize") != null ){
try{
this.fontSize =
Integer.parseInt(getInitParameter("fontSize"));
}
catch (NumberFormatException e){
this.fontSize = this.FONTSIZE;
}
}else this.fontSize = this.FONTSIZE;
if ( getInitParameter("counter") != null ){
try{
this.counter =
Integer.parseInt(getInitParameter("counter"));
}
catch (NumberFormatException e){
this.counter = this.counter;
}
}else this.counter = this.counter;
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException {
// コンテンツのタイプを設定します。
resp.setContentType("text/html");
String userName;
PrintWriter out = resp.getWriter();
if (req.getParameter("userName") != null)
userName = req.getParameter("userName");
else userName = new String("Stranger");
out.println("<html><head>Hello " + userName + "</head><body><br>");
out.println("This page has been accessed <font size=+" + fontSize
+">" + counter++ + "</font> times<br>");
out.println("</body></html>");
}
}
counter と fontSize はどちらも、クラス定義で既定値が定義されています。しかし、公開担当者とシステム管理者はオプションとして初期化パラメータを使用し、これらの既定値を書き換えることができます。この柔軟性があるため、サイトでは任意の値からカウントを開始でき、また、カウンタ値の表示のために任意のフォント サイズを指定できます。
JMC を使用してサーブレットの初期化パラメータを指定します。JMC の使用の詳細については、『JRun セットアップ ガイド』を参照してください。
このチュートリアルは、Java の基礎について理解していることを前提としているため、定数や変数の宣言については説明しません。
最初のメソッドは init メソッドです。init メソッドは、getInitParameter メソッドを使用して初期化パラメータを取得するため、またグローバル変数を初期化するために使用します。この例では init メソッドを引数なしで使用します (init(ServletConfig config) バージョンを使用する場合、init メソッドの最初の行は super.init(config) の呼び出しである必要があります)。
JRun サーバーが再起動されるまで、またはサーブレットが動的に再ロードされるまで、サーブレットはメモリに保持されます。また、init メソッドはサーブレットがロードされるときに一度だけ呼び出されるため、グローバル変数は 1 回だけ初期化されます。グローバル変数は初期化された後、サーブレットのライフタイムが終わるまで利用可能で、異なるクライアント要求の間で同じステートを保ちます。
したがって、init メソッドのコードによって、公開担当者またはシステム管理者が JMC を使用して有効な初期化パラメータを設定した場合、グローバル変数はそれらの値に設定されます。初期化パラメータが設定されなかった場合、または誤った初期化パラメータが設定された場合は、グローバル変数は既定値 (定数) に設定されます。
doGet メソッドはその HTML 出力内で fontSize および counter 変数を使用します。