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

HttpServlet クラスにより、GenericServlet クラスが拡張されます。開発するサーブレット クラスの大半で、HttpServlet クラスが拡張されます。HttpServlet を使用してプログラミングするには、service メソッド、または HTTP 固有の要求処理メソッドのどちらかを書き換える必要があります。

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

service メソッドの書き換え

service メソッドは、サーブレットが要求されるたびに呼び出されます。

doGet メソッドの書き換え

doGet メソッドは、HTTP GET 要求のために呼び出されます。ユーザが URL をタイプ、リンクをクリック、または method=GET を指定するフォームを送信した場合、Web ブラウザにより HTTP GET 要求が送信されます。

次の例で示されているサーブレットは、doGet メソッドを使用して基本情報を表示します。

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

public class DisplayInfo extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse resp)
  throws IOException, ServletException { 
  resp.setContentType("text/html");
  PrintWriter out = resp.getWriter();
  out.println("<html><head><title>Display Information");
  out.println("</title></head><body>");
  out.println("<h1>displayInfo Servlet</h1>");
  out.println("<h2>Request Information</h2>");
  out.println("Scheme:" + req.getScheme() + "<br>");
  out.println("Server Name:" + req.getServerName() + "<br>");
  out.println("RemoteAddr:" + req.getRemoteAddr() + "<br>");
  out.println("RemoteHost:" + req.getRemoteHost() + "<br>");
  out.println("Method:" + req.getMethod() + "<br>");
  out.println("Query String:" + req.getQueryString() + "<br>");
  out.println("Request URI:" + req.getRequestURI() + "<br>");
  out.println("Servlet Path:" + req.getServletPath() + "<br>");
  out.println("</body></html>");
} 
}

doPost メソッドの書き換え

doPost メソッドは、HTTP POST 要求のために呼び出されます。ユーザが method=POST を指定するフォームを送信した場合、Web ブラウザにより HTTP POST 要求が送信されます。

以下に示すのは、POST 要求を通じてサーブレットを呼び出す HTML フォームの例です。

<html>
<head>
  <title> Login to the System </title>
</head>

<body bgcolor="Silver">
<h1> Login to the System </h1>

<!-- ログイン フォームの表示 -->
<form action="/servlet/selectionForm" method="POST">
<p>Name:&nbsp;
<input type="Text" name="myName" size="30">
<p>
<input type="Submit" value="Log In">
</form>
</body>
</html>

次の例にあるサーブレットは、doPost メソッドを使用して、渡された値にアクセスしています。

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

public class selectionForm extends HttpServlet {

public void doPost(HttpServletRequest req, HttpServletResponse resp)
  throws IOException, ServletException {
  resp.setContentType("text/html"); 
  PrintWriter out = resp.getWriter();
  String thisName = "Unknown Name";
  // ログイン情報からユーザ名を取得します。
  String[] attrArray = req.getParameterValues("myName");
  // 呼び出し側フォームには、myName の値が 1 つしかないと想定します。
  if(attrArray != null) {
    thisName = attrArray[0];
  }
  out.println("<html><head><title>Choose Information to Display");
  out.println("</title></head><body>");
  out.println("<h1>Welcome " + thisName + "</h2>");
  out.println("<h2>Choose Information to Display</h2>");
  // ¥ を使用して、二重引用符をエスケープします。
  out.println("<form action=¥"/servlet/displayInfo¥" 
method=¥"post¥">");
  // HTTP 要求情報を表示するチェックボックス
  out.println("<p>Display request information?&nbsp;");
  out.println("<input type=¥"Checkbox¥" name=¥"requestInfo¥" checked>");
  // クッキー情報を表示するチェックボックス
  out.println("<p>Display cookies?&nbsp;");
  out.println("<input type=¥"Checkbox¥" name=¥"showCookies¥" checked>"); 
  out.println("<br>");
  out.println("<input type=¥"Submit¥">"); 
  out.println("</form>");
  out.println("</body></html>");
} 
}

ほかの HTTP メソッドの書き換え

次の表で説明するように、HttpServlet クラスには、その他の HTTP 要求タイプをサポートするメソッドが用意されています。HTTP/1.1 ではすべての要求タイプがサポートされていますが、HTTP/1.0 では GETHEAD、および POST だけがサポートされている点に注意してください。
要求タイプ
メソッド
コメント
DELETE
 
doDelete
 
DELETE 要求の詳細については、HTTP のマニュアルを参照してください。
PUT
 
doPut
 
PUT 要求の詳細については、HTTP のマニュアルを参照してください。
HEAD
 
doHead
 
doGet メソッドを実行しますが、返されるのはヘッダだけです。
OPTIONS
 
doOptions
 
既定の実装では、サポートされているオプションの一覧が返されます。通常、このメソッドを書き換える必要はありません。
TRACE
 
doTrace
 
既定の実装では、TRACE 要求のヘッダがすべて一覧に表示されます。通常、このメソッドを書き換える必要はありません。