サーブレット-クライアントHTTPリクエスト
ブラウザがWebページを要求すると、Webサーバーに多くの情報が送信されますが、この情報はHTTP要求のヘッダーの一部として送信されるため、直接読み取ることはできません。詳細については、HTTPプロトコルを確認してください。
以下はブラウザ側から来る重要なヘッダー情報であり、Webプログラミングで非常に頻繁に使用します-
シニア番号 | ヘッダーと説明 |
---|---|
1 | Accept このヘッダーは、ブラウザーまたは他のクライアントが処理できるMIMEタイプを指定します。の値image/png または image/jpeg 2つの最も一般的な可能性です。 |
2 | Accept-Charset このヘッダーは、ブラウザーが情報を表示するために使用できる文字セットを指定します。たとえば、ISO-8859-1。 |
3 | Accept-Encoding このヘッダーは、ブラウザーが処理方法を知っているエンコーディングのタイプを指定します。の値gzip または compress 2つの最も一般的な可能性です。 |
4 | Accept-Language このヘッダーは、サーブレットが複数の言語で結果を生成できる場合に備えて、クライアントの優先言語を指定します。たとえば、en、en-us、ruなど |
5 | Authorization このヘッダーは、パスワードで保護されたWebページにアクセスするときにクライアントが自分自身を識別するために使用されます。 |
6 | Connection このヘッダーは、クライアントが永続的なHTTP接続を処理できるかどうかを示します。持続的接続により、クライアントまたは他のブラウザは1回のリクエストで複数のファイルを取得できます。の値Keep-Alive 持続的接続を使用する必要があることを意味します。 |
7 | Content-Length このヘッダーはPOST要求にのみ適用可能であり、POSTデータのサイズをバイト単位で示します。 |
8 | Cookie このヘッダーは、以前にブラウザに送信したサーバーにCookieを返します。 |
9 | Host このヘッダーは、元のURLで指定されたホストとポートを指定します。 |
10 | If-Modified-Since このヘッダーは、指定された日付以降にページが変更された場合にのみ、クライアントがページを必要としていることを示します。サーバーはコード304を送信します。これはNot Modified 新しい結果が利用できない場合はヘッダー。 |
11 | If-Unmodified-Since このヘッダーは、If-Modified-Sinceの逆です。これは、ドキュメントが指定された日付より古い場合にのみ操作が成功するように指定します。 |
12 | Referer このヘッダーは、参照元のWebページのURLを示します。たとえば、Webページ1にいて、Webページ2へのリンクをクリックした場合、ブラウザがWebページ2を要求すると、Webページ1のURLがReferrerヘッダーに含まれます。 |
13 | 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() このリクエストのURLのプロトコル名から、HTTPリクエストの最初の行のクエリ文字列までの部分を返します。 |
24 | String getRequestedSessionId() クライアントによって指定されたセッションIDを返します。 |
25 | String getServletPath() このリクエストのURLのJSPを呼び出す部分を返します。 |
26 | String[] getParameterValues(String name) 指定されたリクエストパラメータが持つすべての値を含むStringオブジェクトの配列を返します。パラメータが存在しない場合はnullを返します。 |
27 | boolean isSecure() この要求がHTTPSなどの安全なチャネルを使用して行われたかどうかを示すブール値を返します。 |
28 | int getContentLength() リクエスト本文の長さをバイト単位で返し、入力ストリームで使用できるようにします。長さが不明な場合は-1を返します。 |
29 | int getIntHeader(String name) 指定されたリクエストヘッダーの値をintとして返します。 |
30 | int getServerPort() このリクエストを受信したポート番号を返します。 |
HTTPヘッダーリクエストの例
以下はを使用する例です getHeaderNames()HTTPヘッダー情報を読み取るためのHttpServletRequestのメソッド。このメソッドは、現在のHTTPリクエストに関連付けられたヘッダー情報を含む列挙型を返します。
列挙型を取得したら、hasMoreElements()メソッドを使用して停止するタイミングを決定し、nextElement()メソッドを使用して各パラメーター名を取得することにより、標準的な方法で列挙型をループダウンできます。
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "HTTP Header Request Example";
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 Name</th><th>Header Value(s)</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>");
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
上記のサーブレットを呼び出すと、次の結果が生成されます-
HTTP Header Request Example
Header Name
Header Value(s)
accept
*/*
accept-language
en-us
user-agent
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encoding
gzip, deflate
host
localhost:8080
connection
Keep-Alive
cache-control
no-cache