HttpServlet クラスにより、GenericServlet クラスが拡張されます。開発するサーブレット クラスの大半で、HttpServlet クラスが拡張されます。HttpServlet を使用してプログラミングするには、service メソッド、または HTTP 固有の要求処理メソッドのどちらかを書き換える必要があります。
doGet
doPostdoPutdoDeletedoHeaddoOptionsdoTraceHttpServletRequest。HTTP ヘッダと、その他のクライアント要求情報が含まれています。
HttpServletResponse。ブラウザに HTML を返すことができます。
service メソッドは、サーブレットが要求されるたびに呼び出されます。
GenericServlet を拡張するサーブレットの場合、service メソッドを書き換える必要があります。また、init メソッドや destroy メソッドを書き換えることもできます。
HttpServlet を拡張するサーブレットの場合、service メソッドの既定の実装で、要求が適切な doXxx メソッドに転送されるようになっています。たとえば、HTTP GET 要求が受信されると、service メソッドにより、doGet メソッドが呼び出されます。既定の service メソッドを書き換える場合、このメソッドで HTTP 要求の全種類を処理できるようになっているか、または適切な doXxx メソッドに対して要求をディスパッチするロジックが含まれている必要があります。
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 メソッドは、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: <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? ");
out.println("<input type=¥"Checkbox¥" name=¥"requestInfo¥" checked>");
// クッキー情報を表示するチェックボックス
out.println("<p>Display cookies? ");
out.println("<input type=¥"Checkbox¥" name=¥"showCookies¥" checked>");
out.println("<br>");
out.println("<input type=¥"Submit¥">");
out.println("</form>");
out.println("</body></html>");
}
}
次の表で説明するように、HttpServlet クラスには、その他の HTTP 要求タイプをサポートするメソッドが用意されています。HTTP/1.1 ではすべての要求タイプがサポートされていますが、HTTP/1.0 では GET、HEAD、および POST だけがサポートされている点に注意してください。