第 3 部

これまで、要求パラメータを取得して指定する方法について説明しました。次に、初期化パラメータを使用する例について取り上げます。このセクションでは、初期化パラメータを使用する方法の 1 つと、サーブレットでそれを取得する方法について説明します。

特定の Web ページのアクセス回数を記録するカウンタが必要であると想定します。また、カウンタの値をほかのサーブレット出力と異なるフォント サイズで表示すると想定します。これらのタスクを実行するために、クラスの中に counterfontSize という 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>");
}
}

counterfontSize はどちらも、クラス定義で既定値が定義されています。しかし、公開担当者とシステム管理者はオプションとして初期化パラメータを使用し、これらの既定値を書き換えることができます。この柔軟性があるため、サイトでは任意の値からカウントを開始でき、また、カウンタ値の表示のために任意のフォント サイズを指定できます。

JMC を使用してサーブレットの初期化パラメータを指定します。JMC の使用の詳細については、『JRun セットアップ ガイド』を参照してください。

このチュートリアルは、Java の基礎について理解していることを前提としているため、定数や変数の宣言については説明しません。

最初のメソッドは init メソッドです。init メソッドは、getInitParameter メソッドを使用して初期化パラメータを取得するため、またグローバル変数を初期化するために使用します。この例では init メソッドを引数なしで使用します (init(ServletConfig config) バージョンを使用する場合、init メソッドの最初の行は super.init(config) の呼び出しである必要があります)。

JRun サーバーが再起動されるまで、またはサーブレットが動的に再ロードされるまで、サーブレットはメモリに保持されます。また、init メソッドはサーブレットがロードされるときに一度だけ呼び出されるため、グローバル変数は 1 回だけ初期化されます。グローバル変数は初期化された後、サーブレットのライフタイムが終わるまで利用可能で、異なるクライアント要求の間で同じステートを保ちます。

したがって、init メソッドのコードによって、公開担当者またはシステム管理者が JMC を使用して有効な初期化パラメータを設定した場合、グローバル変数はそれらの値に設定されます。初期化パラメータが設定されなかった場合、または誤った初期化パラメータが設定された場合は、グローバル変数は既定値 (定数) に設定されます。

doGet メソッドはその HTML 出力内で fontSize および counter 変数を使用します。

次の図はサーブレットの出力を示しています。

これで初期化パラメータを取得する方法は終了です。基本的なサーブレットであれば、自分で作成できるはずです。