Servlet クライアント HTTP リクエスト

ブラウザがWebページをリクエストすると、Webサーバーに特定の情報が送信されます。これらの情報はHTTPリクエストのヘッダーの一部として送信されるため、直接読み取ることはできません。以下で確認できます:HTTP プロトコル関連情報の詳細をご覧ください。

以下は、ブラウザ側からの重要なヘッダー情報で、Webプログラミングで頻繁に使用できます:

ヘッダー情報説明
Acceptこのヘッダー情報は、ブラウザまたは他のクライアントが処理できるMIMEタイプを指定します。値image/png 或 image/jpegは最も一般的な2つの可能な値です。
Accept-Charsetこのヘッダー情報は、ブラウザが情報を表示するために使用できる文字セットを指定します。例:ISO-8859-1。
Accept-Encodingこのヘッダー情報は、ブラウザが処理方法を知っているエンコーディングタイプを指定します。値gzip 或 compressは最も一般的な2つの可能な値です。
Accept-Languageこのヘッダー情報はクライアントの優先言語を指定します。この場合、Servletは複数言語の結果を生成します。例:en、en-us、ru など。
Authorizationこのヘッダー情報は、クライアントがパスワードで保護されたWebページにアクセスする際に、自分の身元を識別するために使用されます。
Connectionこのヘッダー情報は、クライアントが永続的なHTTP接続を処理できるかどうかを示します。永続接続により、クライアントまたは他のブラウザは単一のリクエストで複数のファイルを取得できます。値Keep-Aliveは永続接続が使用されていることを意味します。
Content-Lengthこのヘッダー情報はPOSTリクエストにのみ適用され、POSTデータのサイズ(バイト単位)を示します。
Cookieこのヘッダー情報は、以前ブラウザに送信されたCookieをサーバーに返します。
Hostこのヘッダー情報は、元のURLのホストとポートを指定します。
If-Modified-Sinceこのヘッダー情報は、指定された日付以降にページが変更された場合にのみ、クライアントがページを要求することを示します。新しい結果が利用できない場合、サーバーは304コードを送信し、ヘッダー情報を示します。Not Modifiedヘッダー情報。
If-Unmodified-Sinceこのヘッダー情報はIf-Modified-Sinceの反対であり、ドキュメントが指定された日付より古い場合にのみ操作が成功することを指定します。
Refererこのヘッダー情報は、リンク先のWebページのURLを示します。例えば、Webページ1にいて、Webページ2へのリンクをクリックした場合、ブラウザがWebページ2をリクエストするとき、Webページ1のURLがRefererヘッダー情報に含まれます。
User-Agentこのヘッダー情報は、リクエストを送信したブラウザまたは他のクライアントを識別し、異なるタイプのブラウザに異なるコンテンツを返すことができます。

HTTP ヘッダーの読み取り方法

以下のメソッドは、Servletプログラムで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()
Servletを保護するために使用される認証スキームの名前を返します。例えば、"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)
指定されたすべてのリクエストパラメータの値を含むStringオブジェクトの配列を返します。パラメータが存在しない場合はnullを返します。
27boolean isSecure()
リクエストがHTTPSなどの安全なチャネルを使用しているかどうかを示すブール値を返します。
28int getContentLength()
リクエストボディの長さをバイト単位で返し、入力ストリームを提供します。長さが不明な場合は-1を返します。
29int getIntHeader(String name)
指定されたリクエストヘッダーの値をint値として返します。
30int getServerPort()
このリクエストを受信したポート番号を返します。
31int getParameterMap()
パラメータをMap型にカプセル化します。

HTTP Header リクエストの例

以下の例では、HttpServletRequest のgetHeaderNames()メソッドを使用してHTTPヘッダー情報を読み取ります。このメソッドは、現在のHTTPリクエストに関連するヘッダー情報を含む列挙を返します。

列挙を取得したら、標準的な方法で列挙をループ処理できます。hasMoreElements()メソッドを使用して停止するタイミングを決定し、nextElement()メソッドを使用して各パラメータの名前を取得します。

//导入必需的 java 库
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/DisplayHeader")

//扩展 HttpServlet 类
public class DisplayHeader extends HttpServlet {

    // 处理 GET 方法请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();
        String title = "HTTP Header 请求实例 - サンプル实例";
        String docType =
            "<!DOCTYPE html> \n";
            out.println(docType +
            "<html>\n" +
            "<head><meta charset=\"utf-8\"><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);
    }
}

上記のテスト例はTomcatTestプロジェクトにあり、対応するweb.xmlの設定は次のとおりです:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet>  
    <!-- 类名 -->  
    <servlet-name>DisplayHeader</servlet-name>  
    <!-- 所在的包 -->  
    <servlet-class>com.サンプル.test.DisplayHeader</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>DisplayHeader</servlet-name>  
    <!-- 访问的网址 -->  
    <url-pattern>/TomcatTest/DisplayHeader</url-pattern>  
  </servlet-mapping>  
</web-app>

ここで、上記のServletを呼び出して、アクセスしますhttp://localhost:8080/TomcatTest/DisplayHeader すると、以下の結果が生成されます:

その他の拡張