JSP クライアントリクエスト

ブラウザがウェブページをリクエストするとき、ブラウザはウェブサーバーに直接読み取ることができない一連の情報を送信します。これらの情報はHTTPヘッダーの一部として送信されるためです。詳細についてはHTTPプロトコルを参照してください。

以下の表に、ブラウザ側のヘッダー情報の重要な内容をいくつか示します。今後のネットワークプログラミングでこれらの情報を頻繁に目にするでしょう。

情報 説明
Accept ブラウザまたは他のクライアントが処理できるMIMEタイプを指定します。通常その値は次のとおりです。image/png 或 image/jpeg
Accept-Charset ブラウザが使用する文字セットを指定します。例: ISO-8859-1
Accept-Encoding エンコーディングタイプを指定します。通常その値は次のとおりです。gzip 或compress
Accept-Language クライアントが優先する言語を指定します。サーブレットがその言語をサポートしている場合、サーブレットは現在の言語で構成された結果セットを優先的に返します。例: en, en-us, ru など。
Authorization パスワードで保護されたWebページにアクセスする際に、異なるユーザーを識別します。
Connection クライアントがHTTP持続接続を処理できるかどうかを示します。持続接続により、クライアントまたはブラウザは1つのリクエストで複数のファイルを取得できます。Keep-Alive持続接続の有効化を示します。
Content-Length POSTリクエストにのみ適用され、POSTデータのバイト数を示します。
Cookie 以前ブラウザに送信されたCookieをサーバーに返します。
Host 元のURL内のホスト名とポート番号を示します。
If-Modified-Since 指定された日付以降にWebページが変更された場合のみ、クライアントがそのWebページを必要とすることを示します。サーバーはクライアントに304コードを送信し、更新されたリソースがないことを示します。
If-Unmodified-Since If-Modified-Since とは逆に、ドキュメントが指定された日付以降も変更されていない場合にのみ、操作は成功します。
Referer 参照元ページのURLを示します。例えば、ページ1にいてページ2へのリンクをクリックした場合、ページ1のURLがブラウザのページ2リクエストのヘッダーに含まれます。
User-Agent 異なるブラウザまたはクライアントから送信されたリクエストを区別するために使用され、異なるタイプのブラウザに対して異なるコンテンツを返します。

HttpServletRequest クラス

requestオブジェクトはjavax.servlet.http.HttpServletRequestクラスのインスタンスです。クライアントがページをリクエストするたびに、JSPエンジンはこのリクエストを表す新しいオブジェクトを生成します。

requestオブジェクトは、HTTPヘッダー情報を取得するための一連のメソッドを提供します。フォームデータ、Cookie、HTTPメソッドなどが含まれます。

次に、JSPプログラミングでよく使用されるHTTPヘッダー情報を取得するメソッドをいくつか紹介します。詳細は以下の表を参照してください。

番号 メソッド& 説明
1 Cookie[] getCookies()クライアントのすべてのCookieの配列を返します。
2 Enumeration getAttributeNames()requestオブジェクトのすべての属性名のコレクションを返します。
3 Enumeration getHeaderNames()すべてのHTTPヘッダー名のコレクションを返します。
4 Enumeration getParameterNames()リクエスト内のすべてのパラメータのコレクションを返します。
5 HttpSession getSession()requestに対応するsessionオブジェクトを返します。存在しない場合は作成します。
6 HttpSession getSession(boolean create)requestに対応するsessionオブジェクトを返します。存在せず、パラメータcreateがtrueの場合は、新しいsessionオブジェクトを返します。
7 Locale getLocale()現在のページのLocaleオブジェクトを返します。responseで設定できます。
8 Object getAttribute(String name)名前がnameの属性値を返します。存在しない場合はnullを返します。
9 ServletInputStream getInputStream()リクエストの入力ストリームを返します。
10 String getAuthType()サーブレットを保護するための認証方式の名前を返します。例: "BASIC" や "SSL"、JSPに保護手段が設定されていない場合はnull。
11 String getCharacterEncoding()requestの文字エンコーディングセット名を返します。
12 String getContentType()request本文のMIMEタイプを返します。不明な場合はnullを返します。
13 String getContextPath()request URIで指定されたコンテキストパスを返します。
14 String getHeader(String name)nameで指定されたヘッダー情報を返します。
15 String getMethod()このrequest内のHTTPメソッドを返します。例: GET、POST、PUT。
16 String getParameter(String name)このrequest内でnameで指定されたパラメータを返します。存在しない場合はnullを返します。
17 String getPathInfo()このrequest URLに関連する追加のパスを返します。
18 String getProtocol()このrequestが使用するプロトコル名とバージョンを返します。
19 String getQueryString()このrequest URLに含まれるクエリ文字列を返します。
20 String getRemoteAddr()クライアントのIPアドレスを返します。
21 String getRemoteHost()クライアントの完全修飾名を返します。
22 String getRemoteUser()クライアントがログイン認証によって認証されたユーザーを返します。ユーザーが認証されていない場合はnullを返します。
23 String getRequestURI()requestのURIを返します。
24 String getRequestedSessionId()requestで指定されたsession IDを返します。
25 String getServletPath()リクエストされたサーブレットパスを返します。
26 String[] getParameterValues(String name)指定された名前のパラメータのすべての値を返します。存在しない場合はnullを返します。
27 boolean isSecure()requestがHTTPSなどの暗号化チャネルを使用しているかどうかを返します。
28 int getContentLength()request本文に含まれるバイト数を返します。不明な場合は-1を返します。
29 int getIntHeader(String name)指定された名前のrequestヘッダー情報の値を返します。
30 int getServerPort()サーバーのポート番号を返します。

HTTP ヘッダーの例

この例では、HttpServletRequestクラスのgetHeaderNames()メソッドを使用してHTTPヘッダー情報を読み取ります。このメソッドは、現在のHTTPリクエストのヘッダー情報を列挙型(Enumeration)の形式で返します。

Enumerationオブジェクトを取得したら、標準的な方法でEnumerationオブジェクトを走査します。hasMoreElements()メソッドでいつ停止するかを判断し、nextElement()メソッドで各パラメータの名前を取得します。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>サンプル(example.com)</title>
</head>
<body>
<h2>HTTP 头部请求实例</h2>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>Header Name</th><th>Header Value(s)</th>
</tr>
<%
   Enumeration headerNames = request.getHeaderNames();
   while(headerNames.hasMoreElements()) {
      String paramName = (String)headerNames.nextElement();
      out.print("<tr><td>" + paramName + "</td>\n");
      String paramValue = request.getHeader(paramName);
      out.println("<td> " + paramValue + "</td></tr>\n");
   }
%>
</table>
</body>
</html>

main.jspにアクセスすると、以下の結果が得られます。

上記のコードでHttpServletRequestクラスの他のメソッドを試すことができます。

その他の拡張