これまで、要求パラメータを取得して指定する方法について説明しました。次に、初期化パラメータを使用する例について取り上げます。このセクションでは、初期化パラメータを使用する方法の 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
変数を使用します。