パラメータ名の取得(getParameterNames)

広告

リクエストに含まれるパラメータ名を取得する必要はあまりありませんが、デバックなどの目的で送付されてきたパラメータを取得したい場合には「HttpServletRequest」インターフェースの親インターフェースの「ServletRequest」インターフェースで定義されている「getParameterNames」メソッドを使います。

Returns an Enumeration of String objects containing the names of the
parameters contained in this request. If the request has no
parameters, the method returns an empty Enumeration. 

Returns:
  an Enumeration of String objects, each String containing the name
    of a request parameter; or an empty Enumeration if the request
    has no parameters

例えば次のように使います。

public class Sample extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    Enumeration names = request.getParameterNames();
    while (names.hasMoreElements()){
      String name = (String)names.nextElement();
    }
  }
}

サンプルプログラム

では簡単なサンプルで試して見ます。

フォームが含まれるHTMLページは、送信方法を「POST」にしたものを使います。

formsample4.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html lang="ja">
<head>
<meta http-equiv="Content-Type" Content="text/html;charset=Shift_JIS">
<title>フォームサンプル</title>
</head>
<body>

<p>アンケート調査です</p>

<form action="/sample/RequestSample4" method="post">

<table>
<tr>
<td>氏名</td>
<td><input type="text" size="20" value="" name="name"></td>
</tr>
<tr>
<td>年齢</td>
<td><input type="text" size="5" value="" name="old"></td>
</tr>
<tr>
<td>好きな果物</td>
<td>
<select name="food" size="3" multiple>
<option value="りんご">りんご</option>
<option value="メロン">メロン</option>
<option value="ぶどう">ぶどう</option>
</select>
</td>
</tr>
</table>
<input type="submit" name="button1" value="送信">
</form>

</body>
</html>

次にフォームから送られてくるリクエストパラメータを処理するサーブレットを作成します。パラメータ名を全て取得し、パラメータ名に対応する値を取り出して名前と値のペアで画面に表示します。

RequestSample4.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Enumeration;

public class RequestSample4 extends HttpServlet {
  public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    response.setContentType("text/html;charset=Shift_JIS");
    PrintWriter out = response.getWriter();

    request.setCharacterEncoding("Shift_JIS");

    StringBuffer sb = new StringBuffer();

    sb.append("<html>");
    sb.append("<head>");
    sb.append("<title>デバッグ</title>");
    sb.append("</head>");
    sb.append("<body>");

    sb.append("<p>");

    Enumeration names = request.getParameterNames();
    while (names.hasMoreElements()){
      String name = (String)names.nextElement();
      String vals[] = request.getParameterValues(name);
      if (vals != null){
        for (int i = 0 ; i < vals.length ; i++){
          sb.append(name);
          sb.append(":");
          sb.append(vals[i]);
          sb.append("<br>");
        }
      }
    }

    sb.append("</p>");

    sb.append("</body>");
    sb.append("</html>");

    out.println(new String(sb));

    out.close();
  }
}

サンプルプログラムをコンパイルして作成した「RequestSample4.class」ファイルを別途作成した「web.xml」ファイルを次のように配置します。

D:¥ -- servlet-sample
        |
        +-- (formsample4.html)
        |
        +-- WEB-INF
             |
             +-- (web.xml)
             |
             +-- classes
                  |
                  +-- (RequestSample4.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>RequestSample4</servlet-name>
    <servlet-class>RequestSample4</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>RequestSample4</servlet-name>
    <url-pattern>/RequestSample4</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/formsample4.html」へブラウザでアクセスして下さい。

getParameterNames

フォームが表示されますので、適当に値を入力してから送信ボタンをクリックして下さい。すると次のようにリクエストパラメータの名前と値を表示します。

getParameterNames

リクエストパラメータの確認を行いたい場合には利用できると思います。

( Written by Tatsuo Ikura )

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