サーブレットクライアントのHTTPリクエスト
ブラウザが Web ページをリクエストすると、特定の情報が Web サーバーに送信されますが、この情報は HTTP リクエストのヘッダーの一部として送信されるため、直接読み取ることはできません。詳細については、HTTP プロトコルを確認してください。
以下は、Web プログラミングで頻繁に使用できる、ブラウザー側からの重要なヘッダー情報です。
ヘッダー情報 | Description |
---|---|
Accept | このヘッダー情報は、ブラウザーまたは他のクライアントができることを指定します。処理する MIME タイプ。値 image/png または image/jpeg は、最も一般的な 2 つの値です。 |
Accept-Charset | このヘッダーは、ブラウザーが情報を表示するために使用できる文字セットを指定します。たとえば、ISO-8859-1。 |
Accept-Encoding | このヘッダーは、ブラウザーが処理方法を認識しているエンコード タイプを指定します。値 gzip または compress は、最も一般的に使用できる 2 つの値です。 |
Accept-Language | このヘッダーはクライアントの優先言語を指定します。この場合、サーブレットは複数の言語で結果を生成します。たとえば、en、en-us、ru などです。 |
Authorization | このヘッダーは、パスワードで保護された Web ページにアクセスするときにクライアントが自身を識別するために使用されます。 |
Connection | このヘッダーは、クライアントが永続的な HTTP 接続を処理できるかどうかを示します。永続的な接続により、クライアントまたは他のブラウザは 1 回のリクエストで複数のファイルを取得できます。値 Keep-Alive は、永続的な接続が使用されることを意味します。 |
Content-Length | このヘッダーは POST リクエストにのみ適用され、POST データのサイズをバイト単位で示します。 |
Cookie | このヘッダーは、以前にブラウザに送信された Cookie をサーバーに返します。 |
Host | このヘッダーは、元の URL のホストとポートを指定します。 |
If-Modified-Since | このヘッダーは、指定された日付以降にページが変更された場合にのみクライアントがそのページを必要とすることを示します。新しい結果が利用できない場合、サーバーは Not Modified ヘッダーを示す 304 コードを送信します。 |
If-Unmodified-Since | このヘッダーは、ドキュメントが指定された日付より前の場合にのみ操作が成功することを指定する If-Modified-Since の逆です。 |
Referer | このヘッダー情報は、参照先の Web ページの URL を示します。たとえば、Web ページ 1 にいて Web ページ 2 へのリンクをクリックした場合、ブラウザが Web ページ 2 を要求すると、Web ページ 1 の URL が Referer ヘッダー情報に含まれます。 |
User-Agent | このヘッダーは、リクエストを行っているブラウザーまたは他のクライアントを識別し、異なる種類のブラウザーに異なるコンテンツを返すことができます。 |
HTTPヘッダーを読み取るメソッド
サーブレットプログラムでHTTPヘッダーを読み取るには、次のメソッドを使用できます。これらのメソッドは、HttpServletRequest オブジェクトを通じて利用できます。
シリアル番号 | メソッドと説明 |
---|---|
1 | Cookie[] getCookies() このリクエストに対してクライアントによって送信されたすべての Cookie オブジェクトを含む配列を返します。 |
2 | Enumeration getAttributeNames() このリクエストで使用可能な属性名を含む列挙を返します。 |
3 | Enumeration getHeaderNames() このリクエストに含まれるすべてのヘッダー名を含む列挙を返します。 |
4 | Enumeration getParameterNames() このリクエストに含まれるパラメータの名前を含む String オブジェクトの列挙を返します。 |
5 | HttpSession getSession() このリクエストに関連付けられた現在のセッションを返すか、リクエストにセッションがない場合はセッションを作成します。 |
6 | HttpSession getSession(boolean create) このリクエストに関連付けられた現在の HttpSession を返すか、現在のセッションがなく、create が true の場合は新しいセッションを返します。 |
7 | Locale getLocale() Accept-Language ヘッダーに基づいて、コンテンツを受け入れるためのクライアントの優先ロケールを返します。 |
8 | Object getAttribute(String name) 指定された名前の属性の値をオブジェクトとして返します。指定された名前の属性が存在しない場合は null を返します。 |
9 | ServletInputStream getInputStream() ServletInputStream を使用して、リクエストの本文をバイナリ データとして取得します。 |
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() HTTP リクエストのクエリ文字列のプロトコル名から最初の行までのリクエストの URL の一部を返します。 |
24 | String getRequestedSessionId() クライアントによって指定されたセッションのセッション ID を返します。 |
25 | String getServletPath() JSP を呼び出すリクエストの URL の一部を返します。 |
26 | String[] getParameterValues(String name) 指定されたすべてのリクエストパラメータの値を含む文字列オブジェクトの配列を返します。パラメータが存在しない場合は null を返します。 |
27 | boolean isSecure() リクエストがHTTPSなどの安全なチャネルを使用するかどうかを示すブール値を返します。 |
28 | int getContentLength() リクエスト本文の長さをバイト単位で返し、入力ストリームを提供します。長さが不明な場合は -1 を提供します。 |
29 | int getIntHeader(String name) 指定されたリクエストヘッダーの値を int 値として返します。 |
30 | int getServerPort() このリクエストを受信したポート番号を返します。 |
HTTP ヘッダー リクエストの例
次の例では、HttpServletRequest の getHeaderNames() メソッドを使用して HTTP ヘッダー情報を読み取ります。このメソッドは、現在の HTTP リクエストに関連するヘッダー情報を含む列挙を返します。
列挙型を取得したら、hasMoreElements() メソッドを使用して停止するタイミングを決定し、nextElement() メソッドを使用して各パラメーターの名前を取得するという、標準的な方法で列挙型をループできます。
// 导入必需的 java 库 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // 扩展 HttpServlet 类 public class DisplayHeader extends HttpServlet { // 处理 GET 方法请求的方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "HTTP Header 请求实例"; String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n"+ "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<table width=\"100%\" border=\"1\" align=\"center\">\n" + "<tr bgcolor=\"#949494\">\n" + "<th>Header 名称</th><th>Header 值</th>\n"+ "</tr>\n"); 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"); } out.println("</table>\n</body></html>"); } // 处理 POST 方法请求的方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
ここで、上記のサーブレットを呼び出すと、次の結果が生成されます:
HTTP ヘッダー要求インスタンス
ヘッダー名 | |
---|---|
*/* | |
en-us | |
Mozilla/4.0 (互換性; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8) | |
gzip 、 DEFLATE | HOST |
接続 | |
キャッシュ制御 | |