Servlet/JSP基礎編06 パラメータ名の取得

作成するプログラム

今回のプログラムでは、リクエストパラメータの名前を取得する方法を解説したいと思う。リクエストパラメータの名前とは、HTML文書の方でタグの中に書かれている、name属性の名前のことである。この名前を取得し、画面上に、リクエストパラメータ名とそこに格納されている値を表示したいと思う。

HTMLの作成

HTMLは前回と似たような形のものにしたいと思う。セレクトボックスと、ラジオボタンチェックボックスを利用する。

プログラムは下記の通りになる。

<!DOCTYPE html>
<html>
    <head>
    <meta charset="UTF-8">
    <title>Servlet/JSP Samples</title>
    </head>
    <body>

    <form action="control" method="post">
    <p>レストランをご予約ください</p>

    <p>
    人数
    <select name="count">
    <option value="1">1</option>
    <option value="2">2</option>
    </select>
    </p>

    <p>
    座席
    <input type="radio" name="seat" value="禁煙" checked>禁煙
    <input type="radio" name="seat" value="喫煙">喫煙
    </p>

    <p>オプション
    <input type="checkbox" name="option" value="ケーキ">ケーキ
    <input type="checkbox" name="option" value="花束">花束
    </p>

    <p><input type="submit" value="予約"></p>
    </form>


    </body>
</html>

具体的なプログラムの内容は、レストランの予約のページである。
まず、セレクトボックスで、予約人数の選択、ラジオボックスで、座席の選択、チェックボックスでオプションの選択ができる。そして、予約のボタンを押せば、サーブレットにリクエストを送られる。

サーブレットの方では、このHTMLの「name属性」と、そこの値を取り出すことが目的である。

サーブレットの作成

作成するサーブレットは先ほど説明した通り、リクエストパラメータ名と、値を取り出すことが目的のプログラムを作成する。

まず、リクエストパラメータ名を取得するには、getParameterNamesメソッドを利用することで手に入れることができる。

しかし、このメソッドの戻り値はEnumerationオブジェクトである。なので、通常の変数には、格納することができない。そこで、Collectionクラスのlistメソッドを使い、ArrayListに変換をし、繰り返し処理で表示することにする。

下記はサーブレットプログラムである。

public class Control extends HttpServlet{

    public void doPost(HttpServletRequest requestHttpServletResponse response)
     throws ServletException,IOException{

        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();

        Page.footer(out);

        request.setCharacterEncoding("UTF-8");
        List<Stringnames=Collections.list(request.getParameterNames());
        for(String name : names){
            String[] values = request.getParameterValues(name);
            for(String value: values){
                out.println("<p>"+ name + "=" + value + "</p>");
            }
        }

        Page.footer(out);
    }
}

 リクエスト引数やレスポンス変数を使う前には、文字エンコーディングをしないといけないので、「setContentType」「setCharacterEncoding」を使用する。

そして、ArrayList配列のnamesにlistメソッドを利用して、リクエストパラメータ名を全て格納する。

繰り返し処理の中では、「getParameterValues」を使う。これは、「getParameter」が一つの値を取り出すのに対し、「getParameterValues」は複数の値を取り出すことができる。

配列valuesに値をいれ、もう一つの繰り返し処理で、

「リクエストパラメータ名 = リクエストパラメータ」のように表示する。

ブラウザの画面は以下のようになる。

f:id:kouki-matsuura:20200825234856p:plain

人数は2で、座席は喫煙、オプションはケーキと花束で選択した。

サーブレットから返信された画面は以下である。

 

count=2

seat=喫煙

option=ケーキ

option=花束

 

「count」「seat」「option」はパラメータ名である。countやseatは値が一つしかないので、一つのみ表示されるが、「option」は0~2個の選択が可能であるから、複数であるときは、「getParameterValues」で複数取り出されていることがわかる。

おわりに

今回はデバッグの際に必要となるリクエストパラメータ名の取り出し方を解説した。これを利用すれば、どのタグがどのような値を取っているのかわかる。

次回からはサーブレットを一旦、置いといて、JSPの基本に入りたいと思う。