転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【技術書メモ】基礎からのサーブレット⑱

クッキー

クライアントサイドに保存されるテキストデータ。保存できるクッキーのサイズや個数には制限が設けられていて、ブラウザによって制限は異なる。

@WebServlet(urlPatterns={"/chapter17/add"})
public class Add extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		String name = "name";
		String value = "value";

		// Cookieの作成
		Cookie cookie = new Cookie(name, value);
		// Cookieの生存期間を設定
		cookie.setMaxAge(60*60*24);
		// Cookieの追加
		resp.addCookie(cookie);
	}


}
@WebServlet(urlPatterns = { "/chapter18/get" })
public class Get extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();
		Page.header(pw);

                // Cookieの取得
		Cookie[] cookies = req.getCookies();
		if(cookies != null) {
			for (Cookie cookie : cookies) {

				String name = cookie.getName();
				String value = cookie.getValue();
				pw.println("<p>" + name + ":" + value + "</p>");

			}
		} else {
			pw.println("クッキーは存在しません。");
		}

		Page.footer(pw);

	}

}

日本語を含むクッキー

@WebServlet(urlPatterns={"/chapter18/add"})
public class Add extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		//String name = "name";
		//String value = "value2";

		String name = URLEncoder.encode("名前", "utf-8");
		String value = URLEncoder.encode("値", "utf-8");

		// Cookieの作成
		Cookie cookie = new Cookie(name, value);
		// Cookieの生存期間を設定
		cookie.setMaxAge(60*60*24);
		// Cookieの追加
		resp.addCookie(cookie);
	}


}
@WebServlet(urlPatterns = { "/chapter18/get" })
public class Get extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();
		Page.header(pw);

		// Cookieの取得
		Cookie[] cookies = req.getCookies();
		if(cookies != null) {
			for (Cookie cookie : cookies) {

				//String name = cookie.getName();
				//String value = cookie.getValue();
				String name = URLDecoder.decode(cookie.getName(), "utf-8");
				String value = URLDecoder.decode(cookie.getValue(), "utf-8");
				pw.println("<p>" + name + ":" + value + "</p>");

			}
		} else {
			pw.println("クッキーは存在しません。");
		}

		Page.footer(pw);

	}

}

もしクッキーを削除したい場合、削除用のメソッドは用意されていない。
そのため、クッキーを取得し、そのクッキーの生存期間をすべて0に設定する。