Cookieをローカルディスクに保存する
次にCookieをWebクライアントのローカルディスクに保存をする方法を見てみましょう。この方法は、Webブラウザーを閉じても、Webクライアントの電源を落としても情報は保持されます。そのためには、有効期限を設定します。
○ ファイル
データを入力するJSPファイルを作成します。プロジェクトに次のようなファイルを追加してください。
ファイル名 | CookieTest2.jsp |
---|
○ プログラム
次のようにプログラムを入力してください。
CookieTest2.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@ page import="java.net.*" %>
- <%
- //各変数を用意する
- String userName = "";
- String name = "";
- String email = "";
- //Cookieを取得する
- Cookie cookies[]=request.getCookies();
- //Cookieが存在するかどうか
- if(cookies!=null){
- for(Cookie cookie : cookies){
- if(cookie.getName().equals("UserName")){
- //クッキーのデータを取得
- userName = cookie.getValue();
- userName = URLDecoder.decode(userName, "utf-8");
- }
- if(cookie.getName().equals("Name")){
- //クッキーのデータを取得
- name = cookie.getValue();
- name = URLDecoder.decode(name, "utf-8");
- }
- if(cookie.getName().equals("Email")){
- //クッキーのデータを取得
- email = cookie.getValue();
- email = URLDecoder.decode(email, "utf-8");
- }
- }
- }
- %>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>クッキーの保存</title>
- </head>
- <body>
- <form action="cookietest2" method="POST">
- ユーザー情報をローカルディスクに保存<br>
- <br>
- ユーザー名:<input type="text" name="user_name" value="<%= userName %>"><br>
- <br>
- 名前:<input type="text" name="name" value="<%= name %>"><br>
- <br>
- Email:<input type="text" name="email" value="<%= email %>"><br>
- <br>
- <input type="checkbox" name="save" value="save">情報を保存する<br>
- <br>
- <input type="submit" value="送信">
- </form>
- </body>
- </html>
○ ファイル
次に、入力したデータをCookieに保存するプログラムを作成します。プロジェクトに次のようServletを追加してください。
パッケージ名 | test.servlet |
---|---|
クラス名 | CookieTest2 |
スーパークラス名 | javax.servlet.http.HttpServlet |
○ プログラム
次のようにプログラムを入力してください。
CookieTest2.java
- package test.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.net.URLEncoder;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @WebServlet("/cookietest2")
- public class CookieTest2 extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //受信するデータの文字コードを設定する
- req.setCharacterEncoding("utf-8");
- //パラメータを取得する
- String userName = req.getParameter("user_name");
- String name = req.getParameter("name");
- String email = req.getParameter("email");
- String save = req.getParameter("save");
- //Cookieに保存するデータをURLエンコードする
- userName = URLEncoder.encode(userName, "utf-8");
- name = URLEncoder.encode(name, "utf-8");
- email = URLEncoder.encode(email, "utf-8");
- //クッキーを準備する
- Cookie unCookie = new Cookie("UserName", userName);
- Cookie nCookie = new Cookie("Name", name);
- Cookie eCookie = new Cookie("Email", email);
- //情報を保存するかどうかで分岐する
- if(save != null && save.equals("save")){
- //クッキーの有効期限を未来にセットする
- unCookie.setMaxAge(60*60*24*30);
- nCookie.setMaxAge(60*60*24*30);
- eCookie.setMaxAge(60*60*24*30);
- }else{
- //クッキーの有効期限を未来にセットする
- unCookie.setMaxAge(-1);
- nCookie.setMaxAge(-1);
- eCookie.setMaxAge(-1);
- }
- //各クッキーを送信する準備をする
- resp.addCookie(unCookie);
- resp.addCookie(nCookie);
- resp.addCookie(eCookie);
- //クライアントに出力する準備
- 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(" クッキーに保存しました。<br>");
- pw.println(" <a href='CookieTest2.jsp'>もどる</a>");
- pw.println("</body>");
- pw.println("</html>");
- }
- }
○ 実行結果
次のURLを入力して実行してみましょう。
http://localhost:8080/WebApp/CookieTest2.jsp
○ 解説
CookieTest2.jspはデータを入力します。このファイルでは、すでにCookieに前回の入力データがあれば、入力フォームに表示させています。11行目でCookieを取得しています。14行目からCookieがあれば、Cookie内のデータを取り出します。16~20行目ではユーザー名のCookieを取り出しています。19行目ではURLDecoderクラスのdecodeメソッド呼び出しています。Cookieを保存するときに日本語を含む情報をURLエンコードしているので、元に戻します。24、29行目も同様です。
21~25行目では名前を、26~30行目はEmailをCookieから取り出しています。それぞれ取り出したデータを45、47、49行目のフォーム部品のvalue属性に指定しています。これにより前回Cookieに保存した内容が表示されるようになります。
CookieTest2.jspの送信ボタンがクリックされると、CookieTest2クラスのdoPostメソッドが呼び出されます。このメソッドでは入力したデータをCookieに保存しています。29~31行目では入力したデータをURLエンコードしています。URLEncoderクラスのencodeメソッドを呼び出して変換しています。この処理により日本語の文字列は%XXの形に変換されます。
Cookieをローカルディスクに保存するにはCookieに有効期限をセットします。41~43行目でそれぞれのCookieオブジェクトにsetMaxAgeメソッドを使って有効期限を約1か月にセットしています。これによりWebブラウザーを閉じてもCookieは残ります。46~48行目はCookieの有効期限を過去にすることでCookieを削除しています。これにより、Webブラウザーを閉じて再びCookieTest2.jspにアクセスすると入力フォームの入力内容は表示されなくなります。