JAVA:IT TRICK

クッキー(Cookie)の作成と取得

サーブレットでクッキーを取得または作成する方法について説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

サーブレットでクッキーを取得または作成する方法について説明します。以下はクッキーを利用したカウンターのサンプルです。

クッキーによるカウンターサンプル

このサンプルではブラウザをリロードするたびにクッキーの値がプラス1されます。また、リロードするたびに取得したクッキーの値をブラウザに表示しています。

クッキーを取得するにはHttpServletRequestクラスのgetCookies()メソッドでクッキーの配列を取得し、CookieクラスのgetValue()メソッドを使って各クッキーの値を取得します。

クッキーを設定するにはCookieクラスのaddCookie()メソッドを使います。また、このサンプルではクッキーの有効期限を一日に設定しています。

Sample50007.java

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 Sample50007 extends HttpServlet {

	public void doGet(HttpServletRequest request,
			HttpServletResponse response)
	throws IOException, ServletException {

		// クッキーを取得
		Cookie[] cookies = request.getCookies();

		Integer count = null;

		if(cookies != null) {
			for(int i = 0; i < cookies.length; i++) {
				Cookie cookie = cookies[i];
				String cookieValue = cookie.getValue();
				count = Integer.valueOf(cookieValue);
				break;
			}
		}

		if(count == null) {
			count = new Integer(0);
		}

		count = new Integer(count.intValue() + 1);

		// クッキーの設定
		Cookie cookie = new Cookie("count", count.toString());
		cookie.setMaxAge(60 * 60 * 24); // 期限一日
		response.addCookie(cookie);

		response.setContentType("text/html; charset=Windows-31J");
		PrintWriter out = response.getWriter();

		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");

		out.println(count + "回目");
		out.println("<br />");
		out.println("<br />");
		out.println("<a href=\"" + request.getRequestURI() + "\">Reload</a>");

		out.println("</body>");
		out.println("</html>");

	}
}

このサンプルのweb.xml定義です。

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>

	<servlet>
		<servlet-name>50007</servlet-name>
		<servlet-class>Sample50007</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>50007</servlet-name>
		<url-pattern>/50007</url-pattern>
	</servlet-mapping>

</web-app>