HTTP リクエストとレスポンス

サーブレットは、HTTP リクエストがサーブレットを Java サーブレットとして直接的に参照した場合、または JSP ファイルとして間接的に参照した場合に起動します。サーブレットが実行する最も一般的なタスクは、HTTP リクエストに保管された情報にアクセスし、その情報を処理してから、結果を HTTP レスポンスの一部としてクライアントに返すことです。

この図は、リクエストが Web サーバーに渡され、Web サーバーがそのリクエストをサーブレットエンジンに渡し、サーブレットエンジンがレスポンスを Web サーバーに返し、Web サーバーがレスポンスをクライアントに返す流れを示しています。

HTTP リクエストには、クライアントからサーブレットに送信される情報が含まれています。たとえば、サーブレットがフォームによって呼び出された場合、サーブレットは処理を行う前に、リクエストに保管されているフォームデータにアクセスします。フォームデータには、たとえば、ユーザー認証で使用されるログイン情報、データベースに書き込まれる登録情報、ユーザーのショッピングカートに追加される商品情報などが含まれます。

次の方法で、サーブレットや JSP の HTTP リクエスト情報にアクセスできます。

サーブレットは、HTTP レスポンスを構築し、このレスポンスをクライアントに返すことによって、リクエストに応じます。サーブレット内で、HTTP レスポンスにアクセスし、クライアントに返されるレスポンスに情報を書き込みます。

次の方法で、サーブレットや JSP の HTTP レスポンス情報にアクセスできます。

HTTP レスポンスには、クライアントへ結果を返送するのに使用する出力ストリームが含まれます。

response オブジェクトと request オブジェクトのメソッド

request オブジェクトと response オブジェクトには多くのメソッドがあり、クライアントからのリクエストを処理するために使用します。次の例では、サーブレットはこれらのオブジェクトを反映し、メソッドと戻り値のタイプを表示します。

...
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
Object object = null;
String targetClass = "javax.servlet.ServletConfig"; //デフォルト
String checkReq = req.getParameter("targetClass");
if (checkReq != null) {
  targetClass = checkReq;
}
if (targetClass.equals("javax.servlet.ServletContext")) {
  object = getServletContext();
}
if (targetClass.equals("javax.servlet.ServletConfig")) {
  object = getServletConfig();
}
...
try {
  Class c = Class.forName(targetClass);
  Method[] meths = c.getMethods();
  Object[] arguments = new Object[] {};
  for (int i=0; i<meths.length; i++) {
    String methodName = meths[i].getName();
    String returnType = meths[i].getReturnType().getName();
    String desc = meths[i].toString();
    Class[] parameterTypes = meths[i].getParameterTypes();
    int m = c.getModifiers();
    out.println("<TR><TD><I>" + methodName + "</I></TD><TD>" + 
returnType + "</TD><TD>" + desc + "</TD>");
  }
} catch (Exception e) {} 
...

サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。

CGI 環境変数へのアクセス

サーブレットの request オブジェクトからは、一般的な CGI 環境変数から提供されるものと同じ環境に関する情報が提供されます。次の表に、request オブジェクトのメソッドとそれらに対応する CGI 環境変数をリストします。
HttpServletRequest メソッド
CGI 環境変数
getAuthType
AUTH_TYPE
getContentLength
CONTENT_LENGTH
getContentType
CONTENT_TYPE
getHeader("Accept")
HTTP_ACCEPT
getRealPath("/")
DOCUMENT_ROOT
getHeader("Referer")
HTTP_REFERER
getHeader("User-Agent")
HTTP_USER_AGENT
getPathInfo
PATH_INFO
getPathTranslated
PATH_TRANSLATED
getQueryString
QUERY_STRING
getRemoteAddr
REMOTE_ADDR
getRemoteHost
REMOTE_HOST
getRemoteUser
REMOTE_USER
getMethod
REQUEST_METHOD
getServletPath
SCRIPT_NAME
getServerName
SERVER_NAME
getServerPort
SERVER_PORT
getProtocol
SERVER_PROTOCOL