作成するプログラム
今回作成するプログラムは、前回と同じように、リクエスト処理の理解のためのものである。まず、HTML文書では、セレクトボックス、ラジオボタン、テキストエリア、チェックボックスを配置する。それぞれ違った入力のものだが、サーブレットのほうでは、どのようにして、これらのリクエストを受け取ることができるのかを検証していきたいと思う。
HTMLの作成
上記に示した要素を取り入れたプログラムを書いていく。
例として、ウェブショッピングの会計時の画面を参考にする。
下がプログラムである。
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="select" method="post">
<p>購入数を選択してください</p>
<select name="count">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="radio" name="payment" value="カード" checked>カード
<input type="radio" name="payment" value="代金引換">代金引換
<input type="radio" name="payment" value="銀行振込">銀行振込
<input type="radio" name="payment" value="コンビニ">コンビニ
<p>商品のご感想をお寄せください</p>
<p><textarea name="review" cols="30" rows="5">商品名:</textarea></p>
<p>お知らせメールの受信を希望されますか?</p>
<p><input type="checkbox" name="mail">おすすめ商品のメールを受け取る</p>
<p><input type="submit" value="確定"></p>
</form>
</body>
</html>
まず、formタブでサーブレットの指定と、POSTメソッドを指定する。
次に、上から、セレクトタブで購入数。ラジオボタンで支払方法。テキストエリアに商品の感想。チェックボックスにメールの受け取りの選択。そして、最後に確定を押すと、サーブレットにリクエストが送られるようになっている。
実際の画面はこのようになっている。
サーブレットでは、複数のリクエストに対応できるようなプログラムにしないといけない。しかし、難しいことはなく、一つのリクエストを受け取れるのなら、複数だって受け取れるはず。
「getParameterメソッド」で全て変数に入れましょう。
下記がそのプログラムになる。
public class Select extends HttpServlet{
public void doPost(HttpServletRequest request , HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html ; charset=UTF-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
String count = request.getParameter("count");
String payment = request.getParameter("payment");
String review = request.getParameter("review");
String mail = request.getParameter("mail");
Page.header(out);
out.println("<p>"+ count + "個の商品をカートを入れました。</p>");
out.println("<p>お支払い方法を"+payment+"に設定しました。</p>" );
out.println("<p>ご感想ありがとうございます。</p>");
out.println("<p>「"+review+"」</p>");
if(mail != null){
out.println("<p>メールをお送りします。</p>");
}else{
out.println("<p>メールをお送りしません");
}
Page.footer(out);
}
}
前回を理解できた人なら、これもすぐに理解できるでしょう。
購入数のデータを変数countに、支払方法を変数paymentに、商品の感想の内容を変数reviewに、メールの受け取りの選択を変数mailにそれぞれ入れる。
あとは、printlnメソッドで表示する。一つポイントとして、メールの受け取りを拒否した場合は、チェックボックスにチェックが入らないので、変数mailの中には何も入りません。なので、nullの場合を想定しなければなりません。よって、if文で条件分岐をします。結果は以下の通りになります。
このブラウザの選択に対してブラウザの表示は次のようになった。
3個の商品をカートを入れました。
お支払い方法をnullに設定しました。
ご感想ありがとうございます。
「商品名:ああああああ」
メールをお送りしません
プログラム通り、問題なく、表示されていることが分かると思う。
おわりに
今回は複数のリクエストに対して、サーブレットの対応を解説した。理解してほしいポイントとしては、セレクトボックスやラジオボタンなど、要素は違うが、サーブレット側では同じように扱えるということである。また、何も入力されない場合も考えて、条件分岐も挟まないといけない。
次回は、パラメータの値ではなく、デバッグの際に必要となる、パラメータ名の取得について解説したいと思う。