Cookieを使ったデータの保存
Cookieとは、Webクライアントのコンピューターに情報を保存させておく仕組みのことです。クライアントサーバ形式のアプリケーションでは技術的にはサーバーからクライアントを操作することはできます。しかし、それによってセキュリティ上の問題が発生します。状況によってはハードディスクの中身を全部消去されかねません。そこで、クライアント側のリソースをサーバー側で操作できないようになっています。
しかし、どうしてもクライアント側にデータを保存しないと不便な場合があります。そこで、少量のデータをハードディスク内に保存する仕組みが用意されています。それがCookieです。Cookieはデータを保存する目的以外にも、セッションを管理したり、ログイン状態を保持したりするときにも使用されます。
まず、メモリ上にCookieを保存する方法を見てみましょう。この方法はWebブラウザーを閉じると保存しているデータは消えてしまいます。
○ ファイル
プロジェクトに次のようなServletを追加してください。
パッケージ名 |
test.servlet |
クラス名 |
CookieTest |
スーパークラス名 |
javax.servlet.http.HttpServlet |
サンプルダウンロード
○ プログラム
doGetメソッド、doPostメソッドを追加して、次のようにプログラムを入力してください。
- package test.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class CookieTest 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 method=\"POST\">");
- pw.println(" ブラウザーのメモリにクッキーを保存してデータを渡す<br>");
- pw.println(" Email:");
- pw.println(" <input type=\"text\" name=\"email\"><br>");
- pw.println(" <input type=\"submit\" value=\"送信\">");
- pw.println(" </form>");
- pw.println("</body>");
- pw.println("</html>");
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //パラメータを取得する
- String mail = req.getParameter("email");
- //クッキーを生成
- Cookie cook = new Cookie("mail", mail);
- //クッキーをセット
- resp.addCookie(cook);
- //違うページにリダイレクト
- resp.sendRedirect("CookieTest.jsp");
- }
- }
〇 Webアプリケーション設定ファイルの編集
web.xmlに次の内容を追加してください。
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1">
(そのほかの記述…)
- <servlet>
- <servlet-name>CookieTest</servlet-name>
- <servlet-class>test.servlet.CookieTest</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>CookieTest</servlet-name>
- <url-pattern>/cookietest</url-pattern>
- </servlet-mapping>
○ ファイル
次に受信するJSPファイルを作成します。プロジェクトに次のようなファイルを追加してください。
サンプルダウンロード
○ プログラム
doGetメソッド、doPostメソッドを追加して、次のようにプログラムを入力してください。
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%
- //クッキーを取得
- Cookie cookies[]=request.getCookies();
- String mail = null;
- if(cookies!=null){
- for(int i=0;i<cookies.length;i++){
- if(cookies[i].getName().equals("mail")){
- //クッキーのデータを取得
- mail=cookies[i].getValue();
- break;
- }
- }
- }
- %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD Html 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>クッキーで受信</title>
- </head>
- <body>
- Cookieを使ってデータを受け取る<br>
- Email:<%= mail %>
- </body>
- </html>
○ 実行結果
http://localhost:8080/WebApp/cookietest
実行結果
○ 解説
クライアントにクッキーを設定するには、応答に付加して送信します。CookieTestクラスの42行目でクライアントに送信するCookieオブジェクトを生成しています。コンストラクタの引数で、クッキー名と保存するデータを指定します。その後45行目で、HttpServletResponseオブジェクトに用意したクッキーを追加しておくことで、応答時にクライアントに渡されるようになります。
保存してあるクッキーは要求時にサーバーに送られてくるので、HttpServletRequestオブジェクトからCookieを取得することができます。CookieTest.jspの5行目でCookieを取得しています。Cookieは複数保存することができるので、取得するときにはCookieの配列として取得します。9~15行目で複数あるCookieから目的のCookieを取り出し、12行目でCookieに保存してあるデータを取り出しています。そして26行目で取り出したデータをWebブラウザーに表示する記述をしています。
前へ 次へ