データをURLに埋め込む

URLにデータを埋め込むには、Webブラウザーが次のページにアクセスするページのURLにデータを付加します。これは、GET送信の節で確認した内容と同様です。次のようにURLを指定します。

http://localhost/WebApp/[次にアクセスするページ]?キー=値&キー=値…

同一のURLに違うデータを付加することで、表示結果を変えるWebアプリケーションを作成しましょう。

○ ファイル

まず、送信する画面を表示するServletを準備します。SendHiddenData.javaをコピーして、次のようなServletを追加してください。

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

サンプルダウンロード

○ プログラム

次のようにプログラムを変更してください。

SendURLData.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("/sendurldata")
  10. public class SendURLData 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(" <a href='receiveurldata?type=fruits'>フルーツ</a><br>");
  24.         pw.println(" <a href='receiveurldata?type=vehicle'>乗り物</a><br>");
  25.         pw.println(" <a href='receiveurldata?type=travel'>旅行</a><br>");
  26.         pw.println("</body>");
  27.         pw.println("</html>");
  28.     }
  29. }

○ ファイル

次に、指定したリンクのURLに埋め込まれたデータを受信して、メッセージを表示するServletを準備します。ReceiveHiddenData.javaをコピーして、プロジェクトに次のようなServletを追加してください。

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

サンプルダウンロード

○ プログラム

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

ReceiveURLData.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("/receiveurldata")
  10. public class ReceiveURLData extends HttpServlet {
  11.     @Override
  12.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13.         //受信するデータの文字コードを設定する
  14.         req.setCharacterEncoding("utf-8");
  15.         
  16.         String type = req.getParameter("type");
  17.         //クライアントへの出力準備をする
  18.         resp.setContentType("text/html;charset=utf-8");
  19.         PrintWriter pw = resp.getWriter();
  20.         
  21.         //取得したタイプに応じて表示する
  22.         String message = "";
  23.         switch(type) {
  24.             case "vehicle":
  25.                 message = "私は飛行機で向かいます。";
  26.                 break;
  27.             case "fruits":
  28.                 message = "私はバナナが好きです。";
  29.                 break;
  30.             case "travel":
  31.                 message = "私はセブ島に行きたいです。";
  32.                 break;
  33.             default:
  34.                 message = "パラメーターが不正です。";
  35.                 break;
  36.         }
  37.         
  38.         //クライアントにHTMLタグを書き出し
  39.         pw.println("<html>");
  40.         pw.println("<head>");
  41.         pw.println("<title>選択結果</title>");
  42.         pw.println("</head>");
  43.         pw.println("<body>");
  44.         pw.println(message);
  45.         pw.println(" <br><a href='sendurldata'>選択ページへ</a>");
  46.         pw.println("</body>");
  47.         pw.println("</html>");
  48.     }
  49. }

○ 実行結果

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

http://localhost:8080/WebApp/sendurldata

実行結果
実行結果

○ 解説

SendURLData.javaの27~29行目で、リンクの参照先URLに「type」キーでそれぞれデータを付加しています。このリンクをクリックすると、同一のURLに異なるデータが一緒に送信されることになります。

ReceiveURLData.javaの20行目では、URLに付加したデータを取得しています。28~41行目では、URLに付加したデータに応じてメッセージがセットされます。

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

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

前へ   次へ