fc2ブログ

アンケートを作る





さまざまな入力フォームを駆使して、アンケートを作成してみましょう。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文では、それぞれの入力パラメータの名前に対する値を繰り返し出力しています。
スポンサーサイト



タグ :

Return to page top

Comments:

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://servletmania.blog137.fc2.com/tb.php/22-2aa782f4
月別アーカイブ
カテゴリ
リンク
RSSリンクの表示
QRコード
QR