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