サーブレットクライアントの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 オブジェクトを通じて利用できます。

シリアル番号メソッドと説明
1Cookie[] getCookies()
このリクエストに対してクライアントによって送信されたすべての Cookie オブジェクトを含む配列を返します。
2Enumeration getAttributeNames()
このリクエストで使用可能な属性名を含む列挙を返します。
3Enumeration getHeaderNames()
このリクエストに含まれるすべてのヘッダー名を含む列挙を返します。
4Enumeration getParameterNames()
このリクエストに含まれるパラメータの名前を含む String オブジェクトの列挙を返します。
5HttpSession getSession()
このリクエストに関連付けられた現在のセッションを返すか、リクエストにセッションがない場合はセッションを作成します。
6HttpSession getSession(boolean create)
このリクエストに関連付けられた現在の HttpSession を返すか、現在のセッションがなく、create が true の場合は新しいセッションを返します。
7Locale getLocale()
Accept-Language ヘッダーに基づいて、コンテンツを受け入れるためのクライアントの優先ロケールを返します。
8Object getAttribute(String name)
指定された名前の属性の値をオブジェクトとして返します。指定された名前の属性が存在しない場合は null を返します。
9ServletInputStream getInputStream()
ServletInputStream を使用して、リクエストの本文をバイナリ データとして取得します。
10String getAuthType()
サーブレットの保護に使用される認証スキームの名前 (たとえば、「BASIC」または「SSL」) を返します。JSP が保護されていない場合は null を返します。
11String getCharacterEncoding()
リクエストボディで使用される文字エンコーディングの名前を返します。
12String getContentType()
リクエスト本文の MIME タイプを返します。タイプが不明な場合は null を返します。
13String getContextPath()
リクエストコンテキストを示すリクエスト URI の部分を返します。
14String getHeader(String name)
指定されたリクエストヘッダーの値を文字列形式で返します。
15String getMethod()
リクエストされた HTTP メソッドの名前 (GET、POST、PUT など) を返します。
16String getParameter(String name)
リクエストパラメータの値を文字列として返します。パラメータが存在しない場合はnullを返します。
17String getPathInfo()
リクエストが行われたときにクライアントによって送信された URL に関連する追加のパス情報を返します。
18String getProtocol()
要求されたプロトコルの名前とバージョンを返します。
19String getQueryString()
リクエスト URL のパスの後に含まれるクエリ文字列を返します。
20String getRemoteAddr()
リクエストを送信するクライアントのインターネット プロトコル (IP) アドレスを返します。
21String getRemoteHost()
リクエストを送信したクライアントの完全修飾名を返します。
22String getRemoteUser()
ユーザーが認証されている場合はリクエストを行っているログインユーザーを返し、ユーザーが認証されていない場合は null を返します。
23String getRequestURI()
HTTP リクエストのクエリ文字列のプロトコル名から最初の行までのリクエストの URL の一部を返します。
24String getRequestedSessionId()
クライアントによって指定されたセッションのセッション ID を返します。
25String getServletPath()
JSP を呼び出すリクエストの URL の一部を返します。
26String[] getParameterValues(String name)
指定されたすべてのリクエストパラメータの値を含む文字列オブジェクトの配列を返します。パラメータが存在しない場合は null を返します。
27boolean isSecure()
リクエストがHTTPSなどの安全なチャネルを使用するかどうかを示すブール値を返します。
28int getContentLength()
リクエスト本文の長さをバイト単位で返し、入力ストリームを提供します。長さが不明な場合は -1 を提供します。
29int getIntHeader(String name)
指定されたリクエストヘッダーの値を int 値として返します。
30int 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 ヘッダー要求インスタンス

accept言語を受け入れるuser-agentaccept-encodingLOLOLHOST: 8080キープアライブキャッシュなし
ヘッダー名
*/*
en-us
Mozilla/4.0 (互換性; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
gzip 、 DEFLATEHOST
接続
キャッシュ制御