Cookieを使ったデータの保存

Cookieとは、Webクライアントのコンピューターに情報を保存させておく仕組みのことです。クライアントサーバ形式のアプリケーションでは技術的にはサーバーからクライアントを操作することはできます。しかし、それによってセキュリティー上の問題が発生します。状況によってはハードディスクの中身を全部消去されかねません。そこで、クライアント側のリソースをサーバー側で操作できないようになっています。

しかし、どうしてもクライアント側にデータを保存しないと不便な場合があります。そこで、少量のデータをハードディスク内に保存する仕組みが用意されています。それがCookieです。Cookieはデータを保存する目的以外にも、セッションを管理したり、ログイン状態を保持したりするときにも使用されます。

まず、メモリ上にCookieを保存する方法を見てみましょう。この方法はWebブラウザーを閉じると保存しているデータは消えてしまいます。

○ ファイル

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

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

サンプルダウンロード

○ プログラム

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

CookieTest.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.Cookie;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. @WebServlet("/cookietest")
  11. public class CookieTest extends HttpServlet {
  12.     @Override
  13.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  14.         //クライアントに出力する準備
  15.         resp.setContentType("text/html; charset=utf-8");
  16.         PrintWriter pw = resp.getWriter();
  17.         
  18.         //クライアントにHTMLタグを書き出す
  19.         pw.println("<html>");
  20.         pw.println("<head>");
  21.         pw.println("<title>クッキーに保存</title>");
  22.         pw.println("</head>");
  23.         pw.println("<body>");
  24.         pw.println(" <form method=\"POST\">");
  25.         pw.println(" ブラウザーのメモリにクッキーを保存してデータを渡す<br>");
  26.         pw.println(" Email:");
  27.         pw.println(" <input type=\"text\" name=\"email\"><br>");
  28.         pw.println(" <input type=\"submit\" value=\"送信\">");
  29.         pw.println(" </form>");
  30.         pw.println("</body>");
  31.         pw.println("</html>");
  32.     }
  33.     @Override
  34.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  35.         //パラメータを取得する
  36.         String mail = req.getParameter("email");
  37.         
  38.         //クッキーを生成
  39.         Cookie cook = new Cookie("mail", mail);
  40.         
  41.         //クッキーをセット
  42.         resp.addCookie(cook);
  43.         
  44.         //違うページにリダイレクト
  45.         resp.sendRedirect("CookieTest.jsp");
  46.     }
  47. }

○ ファイル

次に受信するJSPファイルを作成します。プロジェクトに次のようなファイルを追加してください。

ファイル名 CookieTest.jsp

サンプルダウンロード

○ プログラム

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

CookieTest.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <%
  4.     //クッキーを取得
  5.     Cookie cookies[] =request.getCookies();
  6.     String mail = null;
  7.     if(cookies != null){
  8.         for(Cookie cookie : cookies){
  9.             if(cookie.getName().equals("mail")){
  10.                 //クッキーのデータを取得
  11.                 mail = cookie.getValue();
  12.                 break;
  13.             }
  14.         }
  15.     }
  16. %>
  17. <!DOCTYPE html>
  18. <html>
  19. <head>
  20. <meta charset="UTF-8">
  21. <title>クッキーで受信</title>
  22. </head>
  23. <body>
  24.     Cookieを使ってデータを受け取る<br>
  25.     Email:<%= mail %>
  26. </body>
  27. </html>

○ 実行結果

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

http://localhost:8080/WebApp/cookietest

実行結果
実行結果

○ 解説

クライアントにクッキーを設定するには、応答に付加して送信します。CookieTestクラスの44行目で、クライアントに送信するCookieオブジェクトを生成しています。コンストラクターの引数で、クッキー名と保存するデータを指定します。その後47行目で、HttpServletResponseオブジェクトに用意したクッキーを追加しておくことで、応答時にクライアントに渡されるようになります。

保存してあるクッキーは要求時にサーバーに送られてくるので、HttpServletRequestオブジェクトからCookieを取得することができます。CookieTest.jspの5行目でCookieを取得しています。Cookieは複数保存することができるので、取得するときにはCookieの配列として取得します。9~15行目で複数あるCookieから目的のCookieを取り出し、12行目でCookieに保存してあるデータを取り出しています。そして26行目で取り出したデータをWebブラウザーに表示する記述をしています。

前へ   次へ