データをフォームの隠し属性に埋め込む

次のページに送信したいデータをフォームの隠し属性に保存する方法です。次のようにHTMLタグで指定します。

<input type="hidden" name="[data_name]" value="[渡したいデータ]">

Webフォームに2つの数字を入力し、隠し属性にセットされた内容に応じて計算結果を表示するWebアプリケーションを作成してみましょう。

○ ファイル

プロジェクトに次のようなServletを追加してください。

パッケージ名 test.servlet
クラス名 SendHiddenData
スーパークラス名 javax.servlet.http.HttpServlet

サンプルダウンロード

○ プログラム

doGetメソッドを追加して、次のようにプログラムを入力してください。

SendHiddenData.java

  1. package test.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. @WebServlet("/sendhiddendata")
  10. public class SendHiddenData extends HttpServlet {
  11.     @Override
  12.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13.         //クライアントへの出力準備をする
  14.         resp.setContentType("text/html;charset=utf-8");
  15.         PrintWriter pw = resp.getWriter();
  16.         
  17.         //クライアントにHTMLタグを書き出し
  18.         pw.println("<html>");
  19.         pw.println("<head>");
  20.         pw.println("<title>計算機</title>");
  21.         pw.println("</head>");
  22.         pw.println("<body>");
  23.         pw.println(" <form action='receivehiddendata' method='POST'>");
  24.         pw.println(" 数字を2つ入力してください。<br>");
  25.         pw.println(" 数字1:<input type='number' name='num1'><br>");
  26.         pw.println(" 数字2:<input type='number' name='num2'><br>");
  27.         pw.println(" <input type='hidden' name='command' value='*'>");
  28.         pw.println(" <input type='submit'>");
  29.         pw.println(" </form>");
  30.         pw.println("</body>");
  31.         pw.println("</html>");
  32.     }
  33. }

○ ファイル

プロジェクトに次のようなServletを追加してください。

パッケージ名 test.servlet
クラス名 ReceiveHiddenData
スーパークラス名 javax.servlet.http.HttpServlet

サンプルダウンロード

○ プログラム

doPostメソッドを追加して、次のようにプログラムを入力してください。

ReceiveHiddenData.java

  1. package test.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. @WebServlet("/receivehiddendata")
  10. public class ReceiveHiddenData extends HttpServlet {
  11.     @Override
  12.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13.         //受信するデータの文字コードを設定する
  14.         req.setCharacterEncoding("utf-8");
  15.         
  16.         //送信されたデータを取得する
  17.         int num1 = Integer.parseInt(req.getParameter("num1"));
  18.         int num2 = Integer.parseInt(req.getParameter("num2"));
  19.         String command = req.getParameter("command");
  20.         //クライアントへの出力準備をする
  21.         resp.setContentType("text/html;charset=utf-8");
  22.         PrintWriter pw = resp.getWriter();
  23.         
  24.         //取得したコマンドに応じて計算する
  25.         int result = 0;
  26.         switch(command) {
  27.             case "+":
  28.                 result = num1 + num2;
  29.                 break;
  30.             case "-":
  31.                 result = num1 - num2;
  32.                 break;
  33.             case "*":
  34.                 result = num1 * num2;
  35.                 break;
  36.             case "/":
  37.                 result = num1 / num2;
  38.                 break;
  39.         }
  40.         
  41.         //クライアントにHTMLタグを書き出し
  42.         pw.println("<html>");
  43.         pw.println("<head>");
  44.         pw.println("<title>計算結果</title>");
  45.         pw.println("</head>");
  46.         pw.println("<body>");
  47.         pw.println(" 計算結果:" + result);
  48.         pw.println("</body>");
  49.         pw.println("</html>");
  50.     }
  51. }

○ 実行結果

次のURLを入力して実行してみましょう。

http://localhost:8080/WebApp/sendhiddendata

実行結果
実行結果

○ 解説

SendHiddenData.javaの31行目で、フォームの隠し属性に「*」をセットしています。この状態のフォームがWebブラウザーに表示されます。数字を2つ入力後送信ボタンが押されることで、入力された数字と、あらかじめセットしておいた「*」が次のページに送られます。

ReceiveHiddenData.javaの21~23行目では、入力した2つのデータと隠し属性で指定した「*」を取得しています。31~44行目では、隠し属性で指定したコマンドに応じて計算されます。

このように、送信元のプログラムでフォームの隠し属性に次の処理で使うデータを埋め込んでおき、次回のリクエストの時にサーバーにデータを送り、処理させることができます。

データの流れ
データの流れ

前へ   次へ