Cookieをローカルディスクに保存する
次にCookieをWebクライアントのローカルディスクに保存をする方法を見てみましょう。この方法は、Webブラウザーを閉じても、Webクライアントの電源を落としても情報は保持されます。そのためには、有効期限を設定します。
○ ファイル
データを入力する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(int i=0;i<cookies.length;i++){
- if(cookies[i].getName().equals("UserName")){
- //クッキーのデータを取得
- username = cookies[i].getValue();
- username = URLDecoder.decode(username, "utf-8");
- }
- if(cookies[i].getName().equals("Name")){
- //クッキーのデータを取得
- name = cookies[i].getValue();
- name = URLDecoder.decode(name, "utf-8");
- }
- if(cookies[i].getName().equals("Email")){
- //クッキーのデータを取得
- email = cookies[i].getValue();
- email = URLDecoder.decode(email, "utf-8");
- }
- }
- }
- %>
- <!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>
- <form action="cookietest2" method="POST">
- ユーザー情報をローカルディスクに保存<br>
- <br>
- ユーザー名:<input type="text" name="username" 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 |
サンプルダウンロード
○ プログラム
doPostメソッドを追加して、次のようにプログラムを入力してください。
- package test.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.net.URLEncoder;
- 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 CookieTest2 extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //パラメータを取得する
- String username = req.getParameter("username");
- String name = req.getParameter("name");
- String email = req.getParameter("email");
- String save = req.getParameter("save");
- //受信したデータをUTF-8に変換する
- username = new String(username.getBytes("8859_1"), "UTF-8");
- name = new String(name.getBytes("8859_1"), "UTF-8");
- email = new String(email.getBytes("8859_1"), "UTF-8");
- //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>");
- }
- }
〇 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>CookieTest2</servlet-name>
- <servlet-class>test.servlet.CookieTest2</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>CookieTest2</servlet-name>
- <url-pattern>/cookietest2</url-pattern>
- </servlet-mapping>
○ 実行結果
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から取り出しています。それぞれ取り出したデータを44、46、48行目のフォーム部品の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にアクセスすると入力フォームの入力内容は表示されなくなります。
前へ 次へ