Webアプリケーションを作成するにあたり、ブラウザへの出力ばかりではなく、フォームを使ってユーザー側からの入力を取得する場合がある。ここではその方法について説明する。
フォームデータの取得の仕方
フォームデータとは、Webページに入力されたデータのことである。このデータには様々なものがある。テキストを入力するテキストフィールド、ラジオボタンの選択、リストからの選択データなどである。
テキスト入力フィールドの例を考えてみよう。
サーブレットが入力されたフォームデータを取得するために、クライアントからリクエスト情報が入っているHttpServletRequestオブジェクトに対してgetParameterメソッドを使う。ラジオボタンのデータはリクエスト情報の中にパラメータとして含まれている。このメソッドにテキスト入力フィールドのパラメータの名前(name)を引数として与えることによって入力されたテキスト入力フィールドのデータを取得することができる。
書き方の基本は簡単だ。
HttpServletRequestオブジェクト. getParameter (パラメータの名前);
実際のHTML画面のフォームデータ入力のコードはこうなる。
<input type="text" name="item1">
その値を取得するサーブレット側のコードはこうなる。
String item1 = request.getParameter("item1");
パラメータを取得するAPI仕様
getParameter(java.lang.String name)
戻り値の型 |
java.lang.String |
内容 |
リクエストのパラメータの値を文字列として戻す。もしパラメータがなければnullを戻す。リクエストパラメータはリクエストともに送られる付加的な情報である。HTTPサーブレットのために、パラメータが参照文字列か送信されたフォームデータに含まれている。 パラメータがただひとつだけの値を持っていることを確かめた時に、このメソッドを使うべきである。もしパラメータがひとつ以上の値を持っているならば、getParameterValues(java.lang.String)を使うべきである。 もし、複数のパラメータで使うならば、戻される値はgetParameterValuesによって返される配列の最初の値である。(更なる詳細は、仕様を参照してください) 引数:指定されたパラメータの名前 戻り値:パラメータのひとつの値を表す文字列。 参照:getParameterValues(java.lang.String) |
フォームデータを取得するサンプルプログラム
このサンプルプログラムは、フォームデータとしてふたつの項目を入力する。そのデータを取得したサーブレットは、入力項目をそのまま項目1と項目2としてレスポンスの画面に表示する。
サーブレットの配置とプログラムのコードは次のようになっている。
最初にHTMLで書かれたフォームデータ入力画面のコードを示す。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <html lang="ja"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <title>フォームデータの取得サンプル</title> </head> <body> <p>ふたつの項目を入力してください。</p> <form action="/Servlet/ServletGetParameters" method="get"> <p>項目1:<input type="text" name="item1"></p> <p>項目2:<input type="text" name="item2"></p> <p><input type="submit" value="入力実行" style="WIDTH: 200px; HEIGHT: 20px"></p> </form> <p> </body> </html> |
次に、HTML画面からリクエストを受け取るサーブレットのコードを示す。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/ServletFormData")//[1] public class ServletFormData extends HttpServlet {//[2] protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//[3] response.setContentType("text/html; charset=Shift_JIS");//[4] String item1 = request.getParameter("item1");//[5] String item2 = request.getParameter("item2");//[6] PrintWriter out = response.getWriter();//[7] out.println("<html><head></head><body>");//[8] out.println("<p>入力された項目を表示します。</p>");//[9] out.println("<p>入力項目1:" + item1 + "</p>");//[10] out.println("<p>入力項目2:" + item2 + "</p>");//[11] out.println("</body></html>");//[12] } } |
実行結果
ブラウザにURL:http://localhost:8080/Servlet/formdata.htmlを入力し、Enterを押す。
表示されるブラウザ画面:
項目1に「aaa」項目2に「bbb」と入力し、入力実行ボタンを押す。
表示されるブラウザ画面:
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] アノテーションの宣言をする。
- [2] HttpServletを継承して、ServletFormDataクラスを定義する。
- [3] doGet()メソッドをオーバーライドして定義する。
- [4] Content Typeを設定する。
- [5] 入力されたフォームデータの項目1を取得し、変数item1に代入する。
- [6] 入力されたフォームデータの項目2を取得し、変数item2に代入する。
- [7] HTMLを出力するためのPrintWriterオブジェクトを取得する。
- [8]-[12] PrintWriterオブジェクトに「入力された項目を表示します。」と表示し、続いて項目1の値(変数item1)と項目2(変数item2)の値を表示するHTMLコードを出力する。
まとめ
サンプルプログラムをご覧頂いてもわかる通り、フォームを使って入力されたデータを元に様々な処理を行う事ができる。HTMLとして出力している部分を中心に、自分なりに色々と変更してみよう。