캠핑과 개발

쿠키는 웹 어플리케이션에서 클라이언트의 정보를 임시로 저장하기 위해 많이 사용된다. 또한, 클라이언트의 상태를 유지할 때 사용되는 세션을 구현하기 위해 쿠키를 사용하기도 한다. 쿠키를 사용함으로써 좀더 쉽고 간결한 방법으로 웹 어플리케이션을 구현할 수 있게 되는 경우가 많은데 이를 좀더 편하게 관리하기 위해서는 쿠기를 사용할 수 있는 보조 클래스를 만들어서 사용하게 되면 편리하다.

CookieBox.java

/*
 * @(#)CookieBox.java
 * Copyright (c) 2000~ NowOnPlay.com inc., All rights reserved.
 * Total E-Business Group, http://www.nowonplay.com
 *
 * 최초작성일자 : April 15, 2008 (hmjkor@nowonplay.com)
 * 수정이력 :
 */
package kevin.common.utils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Cookie;

import java.util.HashMap;
import java.util.Map;
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.io.IOException;

/**
 * 쿠기를 보다 관리하기 쉽도록 만든 클래스로서
 * http://javacan.madvirus.net/에 있는 내용을 토대로 작성되었다.
 * @author diem
 *
 */
public class CookieBox {
   
    /* 쿠기를 담기위한 맵 */
    private Map cookieMap = new HashMap();
   
    /**
     * 생성자
     * request로 받은 쿠키값을 Key, value 값으로 매핑한다.
     * @param request
     */
    public CookieBox(HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (int i = 0 ; i < cookies.length ; i++) {
                cookieMap.put(cookies[i].getName(), cookies[i]);
            }
        }
    }
   
    /**
     * 쿠키를 저장한다.
     * @param name 이름
     * @param value 값
     * @return
     * @throws IOException
     */
    public static Cookie createCookie(String name, String value)
    throws IOException {
        return new Cookie(name, URLEncoder.encode(value, "euc-kr"));
    }
   
    /**
     * 쿠키를 저장한다.
     * @param name 이름
     * @param value 값
     * @param path 경로
     * @param maxAge 유효시간
     * @return
     * @throws IOException
     */

    public static Cookie createCookie(
            String name, String value, String path, int maxAge)
    throws IOException {
        Cookie cookie = new Cookie(name,
                                URLEncoder.encode(value, "euc-kr"));
        cookie.setPath(path);
        cookie.setMaxAge(maxAge);
        return cookie;
    }
   
    /**
     * 쿠키를 저장한다.
     * @param name 이름
     * @param value 값
     * @param domain 도메인
     * @param path 경로
     * @param maxAge 유효시간
     * @return
     * @throws IOException
     */
    public static Cookie createCookie(
            String name, String value, 
            String domain, String path, int maxAge)
    throws IOException {
        Cookie cookie = new Cookie(name,
                  URLEncoder.encode(value, "euc-kr"));
        cookie.setDomain(domain);
        cookie.setPath(path);
        cookie.setMaxAge(maxAge);
        return cookie;
    }
   
    /**
     * 해당되는 쿠키를 가져온다.
     * @param name
     * @return 쿠키값
     */
    public Cookie getCookie(String name) {
        return (Cookie)cookieMap.get(name);
    }
   
    /**
     * 요청한 쿠키 이름의 값을 가져온다.
     * 가져온 값이 없을 경우 null을 리턴한다.
     * @param name 쿠키 이름
     * @return
     * @throws IOException
     */
    public String getValue(String name) throws IOException {
        Cookie cookie = (Cookie)cookieMap.get(name);
        if (cookie == null) return null;
        return URLDecoder.decode(cookie.getValue(), "euc-kr");
    }
   
    /**
     * 요청한 쿠기값이 있는지의 여부를 가져온다.
     * @param name 요청할 쿠키값
     * @return
     */
    public boolean exists(String name) {
        return cookieMap.get(name) != null;
    }
}

소스를 간단하게 설명을 하면 쿠기를 담는 맵을 생성 한 후  그 맵에 Key, Value 값으로 담아두고 Key에 해당하는 쿠기를 가져오는 클래스이다.

이를 사용하기 위해서는 다음과 같이 사용하면 된다.
// CookieBox 클래스의 생성자는 request로부터 쿠키 정보를 추출
CookieBox cookieBox = new CookieBox(request);

// 쿠키가 존재하지 않으면 null 리턴
Cookie idCookie = cookieBox.getCookie("id");

// 지정한 이름의 쿠키가 존재하는지의 여부
if (cookieBox.exists("name")) { ... }

//지정한 이름의 쿠키가 존재하지 않으면 값으로 null 리턴
 String value = cookieBox.getValue("key");


이글은 최범균님의 홈페이지에서 참고한것 입니다.