ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Cookie 처리를 위한 Util Class
    프로그램/JSP 2007. 11. 16. 16:27

    특정 쿠키의 값을 읽어 오기 위한 ...쿠키 처리를 위한 유틸리티 클레스 작성

    CookieBox.java
    -------------------------------------------------------
    package jsp.util;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.Cookie;
    import java.util.Map;
    import java.net.URLEncoder;
    import java.net.URLDecoder;
    import java.io.IOException;

    public class CookieBox{
     private Map cookieMap= new java.util.HashMap();//쿠키를 <쿠키 이름, Cookie 객체> 쌍으로 저장하는 맵
     
     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]);
       }
      }
     }//CookieBox 클래스의 생성자. CookieBox 클래스의 객체를 생성할때 사용된다.
     //인자로 전달 받은 request로부터 Cookie 배열을 읽어 와서,각각의 Cookie 객체를 선언한 cookieMap에 저장한다.
     
     public static Cookie createCookie(String name,String value) throws IOException{
      return new Cookie(name,URLEncoder.encode(value,"euc-kr"));
     }//이름이 name 이고 값이 value인 Cookie 객체를 생성해서 리턴한다.
     
     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;
     }//이름이 name, 값이 value, 도메인이 domain, 경로가 path, 유효시간이 maxAge인 Cookie 객체를 생성해서 리턴한다.
     
     public Cookie getCookie(String name){
      return (Cookie)cookieMap.get(name);
     }//cookieMap에 저장된 쿠키에서 지정한 이름의 Cookie 객체를 구한다.
     //지정한 이름의 쿠키가 존재하지 않으면 null을 리턴한다.
     
     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");
     }//cookieMap에 저장된 쿠키에서 지정한 이름의 Cookie 객체를 구한후 그 Cookie객체의 값을 구한다.
     //지정한 이름의 쿠키가 존재하지 않으면 null을 리턴한다.
     
     public boolean exists(String name){
      return cookieMap.get(name) != null;
     }//지정한 이름의 Cookie가 존재할 경우 true, 그렇지 않으면 false를 리턴한다.
     //지정한 이름의 쿠키가 존재하지 않으면 null을 리턴한다.
    }
    ------------------------------------------------------------------

    [소스 코드 컴파일]
    C:\>set CLASSPATH=C:\jakarta-tocat...\..\common\lib\servlet-api.jar
    C:\>cd jakarta-tomcat\webapps\chap09\WEB-INF
    C:\>.....\WEB-INF>mkdir classes                             <- 클레스 디렉토리 생성
    C:\>.....\WEB-INF>javac -d classes src\jsp\util\CookieBox.java

    javac를 실행하는데 다음과 같은 에러 메세지가 나올 수도 있다.

    'javac'은(는) 내부 또는 외부 명령,실행할 수 있는 프로그램,또는
    배치 파일이 아닙니다.

    이 경우 다음의 명령어를 실행한 후에 javac를 실행하면 된다.
    C:....\WEB-INF>set PATH=c:\j2sdk1.4.2\bin;%PATH%

    javac 명령어까지 모두 올바르게 수행되었다면 WEB-INF\classes\jsp\util폴더에
    CookieBox.class 클레스가 생성되었을 것이다. CookieBox.class 클레스가 생성되었다면
    CookieBox 클레스를 사용하여 쿠키 처리 코드를 간단하게 작성할 수 있다.


    CookieBox.create() 메소드를 사용해서 쿠키를 생성하는 JSP 코드
    ----------------------------------------------------------------
    <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ page import = "chap09.jsp.util.CookieBox" %>
    <%
        response.addCookie(CookieBox.createCookie("name", "최범균"));
        response.addCookie(CookieBox.createCookie("id", "madvirus", "/chap09", -1));
    %>
    <html>
    <head><title>CookieBox사용예</title></head>
    <body>

    CookieBox를 사용하여 쿠키 생성

    </body>
    </html>
    ----------------------------------------------------------------
       
     그것을 읽는 페이지
    ----------------------------------------------------------------
    <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ page import = "jsp.util.CookieBox" %>
    <%
        CookieBox cookieBox = new CookieBox(request);
    %>
    <html>
    <head><title>Cookie 사용</title></head>
    <body>

    name 쿠키 = <%= cookieBox.getValue("name") %> <br>
    <%  if (cookieBox.exists("id")) { %>
    id 쿠키 = <%= cookieBox.getValue("id") %> <br>
    <%  }  %>
    </body>
    </html>
    ----------------------------------------------------------------

Designed by Tistory.