- Home ›
- サーブレット/JSP入門 ›
- クッキーの利用
値の再設定
広告
クッキーを取り出した後で、別の値を設定してみます。
「Cookie」クラスで用意されている"setValue"メソッドで既存のクッキーに別の値を設定できます。
setValue public void setValue(java.lang.String newValue)
Assigns a new value to a cookie after the cookie is created. If you use a binary value, you may want to use BASE64 encoding. With Version 0 cookies, values should not contain white space, brackets, parentheses, equals signs, commas, double quotes, slashes, question marks, at signs, colons, and semicolons. Empty values may not behave the same way on all browsers. Parameters: newValue - a String specifying the new value
新しい値を設定したら、改めて"addCookie"メソッドを使ってクライアントに書き込む必要があります。
使い方は下記のような感じとなります。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); request.setCharacterEncoding("Shift-JIS"); Cookie cookie[] = request.getCookies(); Cookie visitedCookie = null; if (cookie != null){ for (int i = 0 ; i < cookie.length ; i++){ if (cookie[i].getName().equals("visited")){ visitedCookie = cookie[i]; } } if (visitedCookie != null){ int visited = Integer.parseInt(visitedCookie.getValue()); visitedCookie.setValue(Integer.toString(visited + 1)); response.addCookie(visitedCookie); } } }
サンプルプログラム
では一度試してみます。
web.xmlファイルは下記のようにしました。
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>cookietest</servlet-name> <servlet-class>CookieTest2</servlet-class> </servlet> <servlet-mapping> <servlet-name>cookietest</servlet-name> <url-pattern>/cookietest</url-pattern> </servlet-mapping> </web-app>
プログラムは下記のようになります。
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class CookieTest2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>クッキーテスト</title>"); out.println("</head>"); out.println("<body>"); Cookie cookie[] = request.getCookies(); Cookie visitedCookie = null; if (cookie != null){ for (int i = 0 ; i < cookie.length ; i++){ if (cookie[i].getName().equals("visited")){ visitedCookie = cookie[i]; } } if (visitedCookie != null){ int visited = Integer.parseInt(visitedCookie.getValue()) + 1; out.println("<p>"); out.println(visited); out.println("回目の訪問です。</p>"); visitedCookie.setValue(Integer.toString(visited)); response.addCookie(visitedCookie); }else{ out.println("<p>初回の訪問です。</p>"); Cookie newCookie = new Cookie("visited", "1"); response.addCookie(newCookie); } }else{ out.println("<p>初回の訪問です。</p>"); Cookie newCookie = new Cookie("visited", "1"); response.addCookie(newCookie); } out.println("<a href=\"/cookie/cookietest\">再表示</a>"); out.println("</body>"); out.println("</html>"); } }
上記をコンパイル後に「d:\servlet-sample\cookie\WEB-INF\classes\」ディレクトリにクラスファイルを移動した後で、ブラウザで「http://localhost:8080/cookie/cookietest」へアクセスしてみます。
「再表示」をクリックすると訪問回数が増加していきます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。