JAVA:IT TRICK

日本語クッキー(Cookie)の利用

サーブレットで日本語クッキーを扱う方法について説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

サーブレットで日本語クッキーを扱う方法について説明します。

クッキー(Cookie)に日本語を保持する場合は、レスポンスへの保持時に文字列のエンコードを行い、リクエストからそのクッキー(Cookie)を取得する時に出コードを行う必要があります。以下は日本語クッキー(Cookie)のサンプルです。

日本語クッキーサンプル

このサンプルは一回目のアクセスで新しいクッキーを設定しています。設定するクッキーのキーを「クッキー」、値を「日本語ですよ」に指定しています。2回目以後のアクセスでそのクッキーを取得し、画面に表示しています。

Sample50008.java

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
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 Sample50008 extends HttpServlet {

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

		String key = "";
		String value = "";

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

		if(cookies != null) {
			for(int i = 0; i < cookies.length; i++) {
				Cookie cookie = cookies[i];
				key = URLDecoder.decode(cookie.getName(), "Windows-31J");
				value = URLDecoder.decode(cookie.getValue(), "Windows-31J");
				break;
			}
		}


		// 日本語クッキーの設定
		String cookieKey = URLEncoder.encode("クッキー", "Windows-31J");
		String cookieValue = URLEncoder.encode("日本語ですよ", "Windows-31J");
		Cookie cookie = new Cookie(cookieKey, cookieValue);
		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(key + ":" + value);
		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>50008</servlet-name>
		<servlet-class>Sample50008</servlet-class>
	</servlet>

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

</web-app>

このサンプルをブラウザでアクセスすると、一回目は何も表示されませんが、Reloadリンクか「F5」キーでブラウザをリロードすると、「クッキー:日本語ですよ」が表示されるはずです。