- Home ›
- サーブレット/JSP入門 ›
- クッキーの利用 ›
- HERE
値の再設定
広告
クッキーを取り出した後で、別の値を設定してみます。
「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 )