ヘッダーの値の取得(getHeader)

広告

今度はリクエストに含まれるヘッダーの中で、指定したヘッダー名の値を取得する方法を確認します。

ヘッダの値を取得するには「HttpServletRequest」インターフェースで定義されている「getHeader」メソッドを使います。

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」メソッドも用意されています。

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」メソッドを使ってリクエストに含まれる全てのヘッダー名を所得した後で、各ヘッダー名に対応する値を取得して表示します。

RequestSample8.java

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」へブラウザでアクセスして下さい。

getHeaders

IE7.0でリクエストを出した場合は上記のように表示されました。同じようにFireFoxでリクエストを出した場合は次のように表示されます。

getHeaders

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)