GenericServlet クラスにおけるメソッドのコーディング

GenericServlet クラスでは、Servlet インターフェイスを実装することにより、HTTP ではないサーブレットに機能を提供します。HttpServlet クラスは GenericServlet を書き換えるため、これらのメソッドは HttpServlet を拡張するサーブレットでも使用できます。

アプリケーションで GenericServlet クラスを拡張する場合、このクラスは service メソッドを書き換えます。必要に応じて、getServletInfoinitdestroy メソッドが書き換えられることもあります。さらに、GenericServlet クラスには、サーブレット、要求、およびアプリケーション情報にアクセスするためのメソッドが含まれています。

service メソッドの書き換え

JRun では、サーブレットが要求されるたびに、service メソッドが呼び出されます。GenericServlet を拡張するサーブレットは、service メソッドを書き換えます。

service メソッドで使用できるパラメータは次のとおりです。

次の例では、service メソッドを書き換えます。通常、サーブレットにより拡張されるのは、GenericServlet ではなく、HttpServlet クラスであることに注意してください。

import java.io.*; 
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloPlainText extends GenericServlet {

public void service(ServletRequest req, ServletResponse resp) 
  throws IOException, ServletException { 
  PrintWriter out = resp.getWriter();
  out.println("Hello World.Plain text version.");
} 
}

getServletInfo メソッド、init メソッド、および destroy メソッドの
書き換え

GenericServlet クラスには、サーブレットに特定の機能を提供するために書き換えることができるメソッドが含まれています。

getServletInfo メソッドのコーディング

getServletInfo はオプションのメソッドで、ほかのクラスから呼び出して、サーブレットの説明にアクセスするために使用できます。このメソッドは引数を取らず、次の例のように String を返します。

public String getServletInfo() {
  String infoMessage = "EIS Servlet.Version 1.1";
  return infoMessage;
}

init メソッドのコーディング

JRun では、サーブレットが最初にロードされたときに init メソッドが呼び出されるので、データベース接続や、その他のグローバル変数、参照など、1 回だけ行う必要のある設定や初期化ロジックをコーディングすることもできます。init メソッドを書き換えるためのオプションには、次の 2 つがあります。

次の例では、init メソッドに引数を与えずに使用しています。

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;
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;
}

destroy メソッドのコーディング

サーバーからサーブレットをアンロードする前に、JRun により destroy メソッドが呼び出されます。したがって、データベースの切断やステート管理のような、アプリケーション シャットダウン ロジックをコーディングできます。データベースから切断するコードの例は次のとおりです。

public void destroy() {
  // dbConnection は init メソッドにより設定された
  // インスタンス変数であるとします。
  if (dbConnection != null) {
    dbConnection.close();
  }
}

サーブレット情報、要求情報、およびアプリケーション情報へのアクセス

GenericServlet クラスに含まれる次のメソッドを呼び出して、情報やログ メッセージにアクセスできます。

初期化パラメータの使用

次の例では、getInitParameterNames メソッドと getInitParameter メソッドの両方が使用されています。

  // これは doGet メソッドの一部であると仮定します。
  Enumeration eParmNames = getInitParameterNames();
  while (eParmNames.hasMoreElements()) {
    String parm = (String) eParmNames.nextElement();
    out.println(" " + parm + ":" + getInitParameter(parm) + "<br>");
  }

メッセージのロギング

log メソッドを使用して、プログラマが指定したメッセージをサーブレットのホストになっている JRun サーバーのログ ファイルに書き込むことができます。


メモ

441 ページの第 38 章「ログ」での説明どおり、記録されるログ情報の分量は自動的に 変わります。


次の例では、ユーザのアクセス情報がログに記録されます。

  HttpSession thisSession = req.getSession();
  String userName = (String)thisSession.getAttribute("name");
  if(userName != null) {
    out.println("<h2>Welcome " + userName + "</h2>");
    // ロギング用の情報を準備
    // この例では、ユーザ名と IP アドレスがログに記録されます。
    String logMsg = userName + ", " + req.getRemoteAddr();
    log(logMsg);
  }