ブラウザーが Web ページをリクエストすると、一連の情報が Web サーバーに送信されますが、情報は HTTP ヘッダーの一部として送信されるため、直接読み取ることはできません。詳細については、HTTP プロトコルを確認してください。
次の表に、ブラウザ側の情報ヘッダーの重要な内容を示します。この情報は、将来のネットワーク プログラミングで頻繁に使用されます。
| 情報 | 説明する |
|---|---|
| 受け入れる | ブラウザまたは他のクライアントが処理できる MIME タイプを指定します。その値は通常、 image/pngまたはimage/jpegです。 |
| Accept-Charset | ブラウザで使用する文字セットを指定します。 ISO-8859-1など |
| エンコーディングの受け入れ | エンコードタイプを指定します。通常、その値はgzipまたはcompressです。 |
| 受け入れ言語 | クライアントの優先言語を指定します。サーブレットが現在の言語をサポートしている場合、サーブレットはその言語で結果セットを返すことを優先します。 en、en-us、ru など。 |
| 認可 | パスワードで保護された Web ページにアクセスするときに異なるユーザーを識別する |
| 繋がり | クライアントが HTTP 永続接続を処理できるかどうかを示します。永続的な接続により、クライアントまたはブラウザは 1 回のリクエストで複数のファイルをフェッチできます。キープアライブとは、永続的な接続を有効にすることを意味します |
| コンテンツの長さ | POST リクエストのみに適用され、POST データのバイト数を示します。 |
| クッキー | 以前にブラウザに送信された Cookie をサーバーに返します。 |
| ホスト | 元の URL にホスト名とポート番号を指定します |
| 変更された場合-以降 | 指定された日付に変更された場合にのみ、クライアントがこの Web ページを必要とすることを示します。 サーバーは、更新されたリソースがないことを示す 304 コードをクライアントに送信します。 |
| 変更されていない場合、以降 | If-Modified-Since とは反対に、指定された日付以降ドキュメントが変更されていない場合にのみ操作は成功します。 |
| リファラー | 参照されたページの URL をマークします。たとえば、ページ 1 にいて、ページ 2 へのリンクをクリックすると、ページ 1 の URL がページ 2 に対するブラウザリクエストのヘッダーに含まれます。 |
| ユーザーエージェント | 異なるブラウザまたはクライアントから送信されたリクエストを区別し、異なるタイプのブラウザに異なるコンテンツを返すために使用されます。 |
リクエスト オブジェクトは、javax.servlet.http.HttpServletRequest クラスのインスタンスです。クライアントがページをリクエストするたびに、JSP エンジンはリクエストを表す新しいオブジェクトを生成します。
リクエスト オブジェクトは、フォーム データ、Cookie、HTTP メソッドなどを含む HTTP 情報ヘッダーを取得するための一連のメソッドを提供します。
次に、HTTP 情報ヘッダーを取得するために JSP プログラミングで一般的に使用されるメソッドをいくつか紹介します。詳細については、以下の表を参照してください。
| シリアルナンバー | 方法と説明 |
|---|---|
| 1 | Cookie[] getCookies() はクライアント上のすべての Cookie の配列を返します。 |
| 2 | 列挙体 getAttributeNames() は、リクエスト オブジェクトのすべての属性名のコレクションを返します。 |
| 3 | 列挙型 getHeaderNames() は、すべての HTTP ヘッダーの名前のコレクションを返します。 |
| 4 | 列挙型 getParameterNames() は、リクエスト内のすべてのパラメータのコレクションを返します。 |
| 5 | HttpSession getSession() は、リクエストに対応するセッション オブジェクトを返します。そうでない場合は、セッション オブジェクトを作成します。 |
| 6 | HttpSession getSession(boolean create) は、リクエストに対応するセッション オブジェクトを返し、パラメータ create が true の場合は、新しいセッション オブジェクトが返されます。 |
| 7 | Locale getLocale() は現在のページの Locale オブジェクトを返します。このオブジェクトは応答として設定できます。 |
| 8 | オブジェクト getAttribute(String name) は、 name という名前の属性値を返します。属性値が存在しない場合は null を返します。 |
| 9 | ServletInputStream getInputStream() は要求された入力ストリームを返します |
| 10 | String getAuthType() は、 「BASIC」や「SSL」など、サーブレットの保護に使用される認証スキームの名前を返します。JSP が保護手段を設定していない場合は null を返します。 |
| 11 | String getCharacterEncoding() はリクエストの文字エンコーディング セット名を返します |
| 12 | String getContentType() はリクエスト本文の MIME タイプを返します。不明な場合は null を返します。 |
| 13 | String getContextPath() は、リクエスト URI で指定されたコンテキスト パスを返します。 |
| 14 | String getHeader(String name) は、名前で指定された情報ヘッダーを返します |
| 15 | String getMethod() は、このリクエストの HTTP メソッド (GET、POST、PUT など) を返します。 |
| 16 | String getParameter(String name) は、このリクエストの名前で指定されたパラメータを返します。パラメータが存在しない場合は null を返します。 |
| 17 | String getPathInfo() は、このリクエスト URL に関連付けられた追加のパスを返します。 |
| 18 | String getProtocol() は、このリクエストで使用されるプロトコル名とバージョンを返します。 |
| 19 | String getQueryString() は、このリクエスト URL に含まれるクエリ文字列を返します。 |
| 20 | String getRemoteAddr() はクライアントの IP アドレスを返します |
| 21 | String getRemoteHost() はクライアントのフルネームを返します |
| 22 | String getRemoteUser() は、ログインを通じてクライアントによって認証されたユーザーを返します。ユーザーが認証されていない場合は null を返します。 |
| 23 | String getRequestURI() はリクエストの URI を返します。 |
| 24 | String getRequestedSessionId() はリクエストで指定されたセッション ID を返します |
| 25 | String getServletPath() は、要求されたサーブレットのパスを返します。 |
| 26 | String[] getParameterValues(String name) は、指定された名前のパラメータのすべての値を返します。パラメータが存在しない場合は null を返します。 |
| 27 | boolean isSecure() は、リクエストが HTTPS などの暗号化されたチャネルを使用するかどうかを返します。 |
| 28 | int getContentLength() は、リクエスト本文に含まれるバイト数を返します。不明な場合は、-1 を返します。 |
| 29 | int getIntHeader(String name) は、指定された名前のリクエスト ヘッダーの値を返します。 |
| 30 | int getServerPort() はサーバーのポート番号を返します |
この例では、HttpServletRequest クラスの getHeaderNames() メソッドを使用して HTTP ヘッダーを読み取ります。このメソッドは、現在の HTTP リクエストのヘッダー情報を列挙形式で返します。
Enumeration オブジェクトを取得した後、標準メソッドを使用して Enumeration オブジェクトを走査し、hasMoreElements() メソッドを使用して停止時期を決定し、nextElement() メソッドを使用して各パラメーターの名前を取得します。
<%@ page import="java.io.*,java.util.*" %><html><head><title>HTTP ヘッダー要求の例</title></head><body><center><h2 >HTTP ヘッダー リクエストの例</h2><table align="center"><tr bgcolor="#949494"><th>ヘッダー名</th><th>ヘッダー値</th></tr ><% 列挙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></center></body></html>main.jsp にアクセスすると、次の結果が得られます。
| ヘッダー名 | ヘッダー値 |
|---|---|
| 受け入れる | */* |
| 受け入れ言語 | en-us |
| ユーザーエージェント | Mozilla/4.0 (互換性; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8) |
| エンコーディングを受け入れる | gzip、収縮 |
| ホスト | ローカルホスト:8080 |
| 繋がり | キープアライブ |
| キャッシュ制御 | キャッシュなし |
上記のコードで HttpServletRequest クラスの他のメソッドを試すことができます。