GenericServlet
クラスでは、Servlet
インターフェイスを実装することにより、HTTP ではないサーブレットに機能を提供します。HttpServlet
クラスは GenericServlet
を書き換えるため、これらのメソッドは HttpServlet
を拡張するサーブレットでも使用できます。
アプリケーションで GenericServlet
クラスを拡張する場合、このクラスは service
メソッドを書き換えます。必要に応じて、getServletInfo
、init
、destroy
メソッドが書き換えられることもあります。さらに、GenericServlet
クラスには、サーブレット、要求、およびアプリケーション情報にアクセスするためのメソッドが含まれています。
JRun では、サーブレットが要求されるたびに、service
メソッドが呼び出されます。GenericServlet
を拡張するサーブレットは、service
メソッドを書き換えます。
service
メソッドで使用できるパラメータは次のとおりです。
ServletRequest
。クライアント要求に関する情報が含まれます。
ServletResponse
。クライアントにデータを返すことができます。
次の例では、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."); } }
GenericServlet
クラスには、サーブレットに特定の機能を提供するために書き換えることができるメソッドが含まれています。
getServletInfo
。このメソッドを使用して、サーブレットを説明できます。
init
。サーブレットがロードされると、JRun によって呼び出されるメソッドです。destroy
。サーブレットをアンロードする前に、JRunによって呼び出されるメソッドです。
getServletInfo
はオプションのメソッドで、ほかのクラスから呼び出して、サーブレットの説明にアクセスするために使用できます。このメソッドは引数を取らず、次の例のように String
を返します。
public String getServletInfo() {
String infoMessage = "EIS Servlet.Version 1.1"; return infoMessage; }
JRun では、サーブレットが最初にロードされたときに init
メソッドが呼び出されるので、データベース接続や、その他のグローバル変数、参照など、1 回だけ行う必要のある設定や初期化ロジックをコーディングすることもできます。init
メソッドを書き換えるためのオプションには、次の 2 つがあります。
public void init(ServletConfig config)
このバージョンでは、init
メソッドを書き換える場合、必ず、先頭行で super.init(config)
を呼び出す必要があります。
public void init()
このバージョンでは、init
メソッドを書き換えるために、super.init(config)
を呼び出す必要はありません。
次の例では、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; }
サーバーからサーブレットをアンロードする前に、JRun により destroy
メソッドが呼び出されます。したがって、データベースの切断やステート管理のような、アプリケーション シャットダウン ロジックをコーディングできます。データベースから切断するコードの例は次のとおりです。
public void destroy() {
// dbConnection は init メソッドにより設定された // インスタンス変数であるとします。 if (dbConnection != null) { dbConnection.close(); } }
GenericServlet
クラスに含まれる次のメソッドを呼び出して、情報やログ メッセージにアクセスできます。
getInitParameter
および getInitParameterNames
これらのメソッドを使用して、サーブレットの初期化パラメータにアクセスできます。
getServletConfig
このメソッドにより ServletConfig
オブジェクトが返され、初期化パラメータやコンテキスト情報にアクセスできます。GenericServlet
には、この情報にアクセスするためのメソッドが含まれています。したがって、通常、getServletConfig
は使用しません。getServletContext
このメソッドにより、ServletContext
オブジェクトが返されるので JRun と対話するメソッドにアクセスできます。コード例については、"サーブレット コンテキストの使用"を参照してください。log
。ログ ファイルにメッセージが書き込まれます。
次の例では、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); }