アンケートを作る
- 2010-12-06 Mon 16:53:06
- データのやり取り
さまざまな入力フォームを駆使して、アンケートを作成してみましょう。JSPファイルで出力されたアンケートに答えると、サーブレットが呼び出され、受け取ったパラメータを一覧表示できるようにします。
音楽に関するアンケート
- あなたの性別(男または女をラジオボタンで一つだけ選択)
- 好きなジャンル(チェックボックスで複数選択可能 ジャズ・ポップス・クラシック)
- 好きな国(セレクトボックスで 日本・アメリカ・韓国)
- 好きな歌手(テキストフィールドで)
- ご意見・ご要望(テキストエリアで)
ファイルは、「form_entry」パッケージの下に「Enquete.java」、「form_entry」フォルダの下に「Enquete.jsp」を作成します。
web.xmlを設定する
<servlet>
<servlet-name>Enquete</servlet-name>
<servlet-class>form_entry.Enquete</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Enquete</servlet-name>
<url-pattern>/Enquete</url-pattern>
</servlet-mapping>
いつものように、<web-app> ~ </web-app>の間に上のソースを挟みます。
JSPファイルを記述する
<%@page contentType="text/html; charset=Windows-31J" %>
<html><body>
<h3>音楽に関するアンケート</h3>
<form action="../Enquete">
<p>あなたの性別
<input type="radio" name="sex" value="男性">男性
<input type="radio" name="sex" value="女性">女性
<p>好きなジャンル(複数選択可能)
<input type="checkbox" name="genre" value="ジャズ">ジャズ
<input type="checkbox" name="genre" value="ポップス">ポップス
<input type="checkbox" name="genre" value="クラシック">クラシック
<p>好きな国
<select name="country" size="3">
<option value="日本">日本
<option value="アメリカ">アメリカ
<option value="韓国">韓国
</select>
<p>好きな歌手名
<input type="text" name="singer">
<p>ご意見・ご要望
<textarea name="opinion" cols="30" rows="5"></textarea>
<p>
<input type="submit" value="送信">
<input type="reset" value="リセット">
</form>
</body></html>
JSPファイルについては、HTMLの知識があれば問題ないかと思います。
サーブレットを記述する
package form_entry;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Enquete extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
System.out.println("doGetメソッド実行");
common(request,response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
System.out.println("doPostメソッド実行");
common(request,response);
}
private void common(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
request.setCharacterEncoding("Windows-31J");
response.setContentType("text/plain; charset=Windows-31J");
PrintWriter out=response.getWriter();
Iterator names=(Iterator)request.getParameterNames();
while(names.hasNext()){
String name = (String)names.next();
String[] values=request.getParameterValues(name);
for(int i=0;i<values.length;i++){
out.println(name+"="+values[i]);
}
}
}
}
サーブレットの役割は、JSPから送られた入力フィールドの値を取得して表示することです。
のように表示されます。genre=ジャズ
genre=ポップス
genre=クラシック
singer=北島三郎
sex=男性
opinion=とても素敵だった。
country=日本
ここでは、入力パラメータの名前(genre、singerなど)と、入力パラメータの値(ジャズ、北島三郎など)を次々に取得することが必要になります。入力パラメータの名前を取得するには、getParameterNames()メソッドを利用し、入力パラメータの値を取得するには、getParameterValues()メソッドを利用します。
入力パラメータの名前と値は複数ありますので、次々にデータを取得するために、Java入門で勉強したIteratorインタフェースを利用します(この記事を参照)。
Iteratorインタフェースを利用するには、まず、java.util.Iteratorをインポートします。
そして、Iterator型の変数namesにgetParameterNames()メソッドで取得した入力パラメータの名前を格納します。getParameterNames()メソッドは、すべての入力パラメータの名前を取得し、Enumeration型として返しますので、Iterator型への変換が必要です。
Iterator names=(Iterator)request.getParameterNames();
その後、while文で変数namesの数だけ繰り返し処理を行います。
繰り返し処理の内容は、まず、next()メソッドで返した変数namesはObject型なので、それをString型に変換して、変数nameに格納します。
String name = (String)names.next();
次に、このnameに対応する入力パラメータの値をgetParameterValues()メソッドで取得します。
String[] values=request.getParameterValues(name);
getParameterValues()メソッドの戻り値は、String型の配列です。String型を返すgetParameter()メソッドと異なり、getParameterValues()メソッドにおいては、1つの名前に対して複数の値を返すことができます。チェックボックスなどは、1つの名前に対して複数の値が送られてくることがあるので、このメソッドを使う意味が出てきます。
最後のfor文では、それぞれの入力パラメータの名前に対する値を繰り返し出力しています。
スポンサーサイト
タグ :
Comments: