JSP

jsp 에서 쿠키를 사용하기에는 너무 불편한게 많다.

 

그래서 쿠키를 관리해주는 유틸을 사용해보자.

 

먼저 쿠키를 관리해주는 유틸의 소스이다.



출처: http://cofs.tistory.com/38 [CofS]

 

public class CookieBox {
    
// 쿠키를 <쿠키이름, cookie 객체> 쌍으로 저장하는 맵
    private Map cookieMap = new java.util.HashMap();
    
    /**
     * 생성자
     * cookie배열을 cookieMap에 저장한다.
     * 
     * @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 cookie
     * @throws IOException
     */
    public static Cookie createCookie(String name, String value)
    throws IOException {
        return new Cookie(name, URLEncoder.encode(value, "utf-8"));
    }
 
    /**
     * 쿠키객체를 생성해서 리턴
     * 
     * @param name
     * @param value
     * @param path
     * @param maxAge
     * @return cookie
     * @throws IOException
     */
    public static Cookie createCookie(
            String name, String value, String path, int maxAge) 
    throws IOException {
        Cookie cookie = new Cookie(name, 
                                URLEncoder.encode(value, "utf-8"));
        cookie.setPath(path);
        cookie.setMaxAge(maxAge);
        return cookie;
    }
    
    /**
     * 쿠키객체를 생성해서 리턴
     * 
     * @param name
     * @param value
     * @param domain
     * @param path
     * @param maxAge
     * @return cookie
     * @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, "utf-8"));
        cookie.setDomain(domain);
        cookie.setPath(path);
        cookie.setMaxAge(maxAge);
        return cookie;
    }
    
    /**
     * 쿠키를 가져온다
     * 
     * @param name
     * @return cookie
     */
    public Cookie getCookie(String name) {
        return (Cookie)cookieMap.get(name); 
    }
    
    /**
     * 쿠키의 값을 가져온다
     * 
     * @param name
     * @return value
     * @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(), "utf-8");
    }
    
    /**
     * 쿠키 삭제
     * 
     * @param cookieKey
     * @return
     */
    public Cookie deleteCookie(String cookieKey){
  Cookie cookie = null;
  if(isExist(cookieKey)){
   cookie = getCookie(cookieKey);
   // 쿠키생성시에 setPath()가 설정되어 있으면 삭제시에도 해당 패스를 다시 삭제하기위해서 생성된
   // 쿠키에 재설정하고 setMaxAge(0)으로 설정하며 삭제합니다.
   
   if(cookie.getPath() != null){
    cookie.setPath(cookie.getPath());
   }else{
    cookie.setPath("/");
   }
   if(cookie.getDomain() != null){
    cookie.setDomain(cookie.getDomain());
   }
   cookie.setMaxAge(0);
  }
  return cookie;
 }
    
    /**
     * 쿠키 존재 여부
     * 
     * @param name
     * @return 존재 : true, 미존재 : false
     */
    public boolean isExist(String name) {
        return cookieMap.get(name) != null;
    }
 
 
}


 

 

쿠키를 관리하는 유틸의 사용법이다.

// CookieBox 클래스의 생성자는 request로부터 쿠키 정보를 추출
    CookieBox cookieBox = new CookieBox(request);
     
     Cookie idCookie = cookieBox.getCookie("id"); // 쿠키가 존재하지 않으면 null 리턴
    
     // 지정한 이름의 쿠키가 존재하는지의 여부
    if (cookieBox.exists("name")) {
         ...
     }
     
     // 지정한 이름의 쿠키가 존재하지 않으면 값으로 null 리턴
    String value = cookieBox.getValue("ROLE");


 

쿠키 생성은 createCookie 함수를 사용하여 각각에 맞는 쿠키를 생성하면 된다. 

생성 후 리턴받은 cookie를  response.addCookie(cookie); 해주는 것도 잊지 말자.(클라이언트에게 전송)

 

쿠키 삭제는 deleteCookie 함수를 사용해서 삭제하자.

cookie가 없다면 리턴값은 null 이고 cookie를 리턴받았으면 response.addCookie(cookie); 해주는 것도 잊지 말자.(클라이언트에게 전송)



 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

신인(神人)이라는 말을 듣고 있는 사람은 그 재능을 나타내지 않는다. 무용(無用)이 대용(大用), 즉 쓸모없는 물건이 되었을 때 비로소 그 생명을 다할 수 있다는 것을 알고 있기 때문이다. -장자

댓글 ( 4)

댓글 남기기

작성