ヘッダーの値の取得(getHeader)
今度はリクエストに含まれるヘッダーの中で、指定したヘッダー名の値を取得する方法を確認します。
ヘッダの値を取得するには「HttpServletRequest」インターフェースで定義されている「getHeader」メソッドを使います。
getHeader public java.lang.String getHeader(java.lang.String name)
Returns the value of the specified request header as a String. If the request did not include a header of the specified name, this method returns null. If there are multiple headers with the same name, this method returns the first head in the request. The header name is case insensitive. You can use this method with any request header. Parameters: name - a String specifying the header name Returns: a String containing the value of the requested header, or null if the request does not have a header of that name
このメソッドでは、引数に指定したヘッダー名の値を取得できます。
ヘッダーによっては値が1つではなく複数ある場合があります。全ての値を取得するためのメソッドとして「getHeaders」メソッドも用意されています。
getHeaders public java.util.Enumeration getHeaders(java.lang.String name)
Returns all the values of the specified request header as an Enumeration of String objects. Some headers, such as Accept-Language can be sent by clients as several headers each with a different value rather than sending the header as a comma separated list. If the request did not include any headers of the specified name, this method returns an empty Enumeration. The header name is case insensitive. You can use this method with any request header. Parameters: name - a String specifying the header name Returns: an Enumeration containing the values of the requested header. If the request does not have any headers of that name return an empty enumeration. If the container does not allow access to header information, return null
サンプルプログラム
では簡単なサンプルで試して見ます。下記のサンプルでは前のページで利用した「getHeaderNames」メソッドを使ってリクエストに含まれる全てのヘッダー名を所得した後で、各ヘッダー名に対応する値を取得して表示します。
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.Enumeration; public class RequestSample8 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); StringBuffer sb = new StringBuffer(); sb.append("<html>"); sb.append("<head>"); sb.append("<title>テスト</title>"); sb.append("</head>"); sb.append("<body>"); sb.append("<p>"); Enumeration headernames = request.getHeaderNames(); while (headernames.hasMoreElements()){ String name = (String)headernames.nextElement(); Enumeration headervals = request.getHeaders(name); while (headervals.hasMoreElements()){ String val = (String)headervals.nextElement(); sb.append(name); sb.append(":"); sb.append(val); sb.append("<br>"); } } sb.append("</p>"); sb.append("</body>"); sb.append("</html>"); out.println(new String(sb)); out.close(); } }
サンプルプログラムをコンパイルして作成した「RequestSample8.class」ファイルを別途作成した「web.xml」ファイルを次のように配置します。
D:\ -- servlet-sample | +-- WEB-INF | +-- (web.xml) | +-- classes | +-- (RequestSample8.class)
web.xmlファイルは次のようになります。
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>RequestSample8</servlet-name> <servlet-class>RequestSample8</servlet-class> </servlet> <servlet-mapping> <servlet-name>RequestSample8</servlet-name> <url-pattern>/RequestSample8</url-pattern> </servlet-mapping> </web-app>
コンテキストファイルを作成し「(Tomcatをインストールしたディレクトリ)\Tomcat 5.5\conf\Catalina\localhost\」ディレクトリに「sample.xml」ファイルとして保存します。内容は以下の通りです。
<Context path="/sample" docBase="d:/servlet-sample/sample"> </Context>
準備は以上です。ではTomcatを再起動してから「http://localhost:8080/sample/RequestSample8」へブラウザでアクセスして下さい。
IE7.0でリクエストを出した場合は上記のように表示されました。同じようにFireFoxでリクエストを出した場合は次のように表示されます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。