データをフォームの隠し属性に埋め込む
次のページに送信したいデータをフォームの隠し属性に保存する方法です。次のようにHTMLタグで指定します。
<input type="hidden" name="[data_name]" value="[渡したいデータ]">
Webフォームに2つの数字を入力し、隠し属性にセットされた内容に応じて計算結果を表示するWebアプリケーションを作成してみましょう。
○ ファイル
プロジェクトに次のようなServletを追加してください。
パッケージ名 | test.servlet |
---|---|
クラス名 | SendHiddenData |
スーパークラス名 | javax.servlet.http.HttpServlet |
○ プログラム
doGetメソッドを追加して、次のようにプログラムを入力してください。
SendHiddenData.java
- package test.servlet;
- 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("/sendhiddendata")
- public class SendHiddenData extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //クライアントへの出力準備をする
- resp.setContentType("text/html;charset=utf-8");
- PrintWriter pw = resp.getWriter();
- //クライアントにHTMLタグを書き出し
- pw.println("<html>");
- pw.println("<head>");
- pw.println("<title>計算機</title>");
- pw.println("</head>");
- pw.println("<body>");
- pw.println(" <form action='receivehiddendata' method='POST'>");
- pw.println(" 数字を2つ入力してください。<br>");
- pw.println(" 数字1:<input type='number' name='num1'><br>");
- pw.println(" 数字2:<input type='number' name='num2'><br>");
- pw.println(" <input type='hidden' name='command' value='*'>");
- pw.println(" <input type='submit'>");
- pw.println(" </form>");
- pw.println("</body>");
- pw.println("</html>");
- }
- }
○ ファイル
プロジェクトに次のようなServletを追加してください。
パッケージ名 | test.servlet |
---|---|
クラス名 | ReceiveHiddenData |
スーパークラス名 | javax.servlet.http.HttpServlet |
○ プログラム
doPostメソッドを追加して、次のようにプログラムを入力してください。
ReceiveHiddenData.java
- package test.servlet;
- 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("/receivehiddendata")
- public class ReceiveHiddenData extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //受信するデータの文字コードを設定する
- req.setCharacterEncoding("utf-8");
- //送信されたデータを取得する
- int num1 = Integer.parseInt(req.getParameter("num1"));
- int num2 = Integer.parseInt(req.getParameter("num2"));
- String command = req.getParameter("command");
- //クライアントへの出力準備をする
- resp.setContentType("text/html;charset=utf-8");
- PrintWriter pw = resp.getWriter();
- //取得したコマンドに応じて計算する
- int result = 0;
- switch(command) {
- case "+":
- result = num1 + num2;
- break;
- case "-":
- result = num1 - num2;
- break;
- case "*":
- result = num1 * num2;
- break;
- case "/":
- result = num1 / num2;
- break;
- }
- //クライアントにHTMLタグを書き出し
- pw.println("<html>");
- pw.println("<head>");
- pw.println("<title>計算結果</title>");
- pw.println("</head>");
- pw.println("<body>");
- pw.println(" 計算結果:" + result);
- pw.println("</body>");
- pw.println("</html>");
- }
- }
○ 実行結果
次のURLを入力して実行してみましょう。
http://localhost:8080/WebApp/sendhiddendata
○ 解説
SendHiddenData.javaの31行目で、フォームの隠し属性に「*」をセットしています。この状態のフォームがWebブラウザーに表示されます。数字を2つ入力後送信ボタンが押されることで、入力された数字と、あらかじめセットしておいた「*」が次のページに送られます。
ReceiveHiddenData.javaの21~23行目では、入力した2つのデータと隠し属性で指定した「*」を取得しています。31~44行目では、隠し属性で指定したコマンドに応じて計算されます。
このように、送信元のプログラムでフォームの隠し属性に次の処理で使うデータを埋め込んでおき、次回のリクエストの時にサーバーにデータを送り、処理させることができます。