쿠키 처리

Java SE 2007/07/23 11:00 Posted by Sun

이러한 팁은 Java SE 6을 사용하여 개발되었습니다. Java SE 6은 Java SE Downloads 페이지에서 다운로드할 수 있습니다.

이번 호 테크팁의 저자는 JZ Ventures사의 사장이자 주요 컨설턴트인 John Zukowski입니다.
이전에 다루었던 CookieHandler를 이용한 쿠키 관리 팁 에서는 J2SE 5.0이 네트워크 연결을 통해 쿠키 관리를 지원한다고 설명했습니다. 5.0 릴리스에서는 이러한 간략한 설명을 다루기 위한 프레임워크를 제공했지만 모든 작업을 수행하는 일은 개발자의 몫으로 남았습니다. 정의된 API를 따르기만 하면 되지만 실제로 프로그램에서 쿠키를 제대로 관리하려면 더 많은 작업이 수반됩니다.

J2SE 5.0 API를 다시 간략하게 살펴 보면 모호한 CookieHandler 클래스를 사용할 수 있게 되지만 실제 구현도, 스토리지 메커니즘도, 스토리지 정책도, 저장할 대상도 아무 것도 존재하지 않습니다. Java SE 6으로 이동하면서 CookieManager 클래스는 이러한 CookieHandler의 구현을 제공합니다. CookieStore는 스토리지 메커니즘이고, CookiePolicy는 쿠키를 수락하거나 거부하는 정책을 제공합니다. 그리고 HttpCookie는 저장할 개체입니다.

J2SE 5.0에서 수행하기 어려웠던 작업들이 Java SE 6에서는 기존 클래스를 활용한 간단한 작업이 되었습니다.

다음은 쿠키 작업을 위해 작동하는 J2SE 5.0 프로그램입니다.

   import java.io.*;
   import java.net.*;
   import java.util.*;

   public class Fetch {
     public static void main(String args[]) throws Exception {
       if (args.length == 0) {
         System.err.println("URL missing");
         System.exit(-1);
       }
       String urlString = args[0];
       CookieHandler.setDefault(new ListCookieHandler());
       URL url = new URL(urlString);
       URLConnection connection = url.openConnection();
       Object obj = connection.getContent();
       url = new URL(urlString);
       connection = url.openConnection();
       obj = connection.getContent();
     }
   }

setDefault 메소드는 중간에 CookieHandler를 호출합니다. ListCookieHandler 클래스는 기본 CookieHandler의 팁 구현이었습니다.

동일한 프로그램의 Java SE 6 버전은 거의 동일하며 다음 행만 다릅니다.

   CookieHandler.setDefault(new CookieManager());

추가 코드는 제공하지 않아도 됩니다. 간단하게 다른 API 사이를 이동할 수 있습니다. 다른 차이점은 있지만 페치(Fetch) 프로그램의 한 행을 변경하면 두 번째 네트워크 연결이 첫 번재 연결에서 반환된 쿠키를 사용합니다.

차이점은 다음과 같습니다. Java SE 6에는 CookiePolicy가 있습니다. 이것은 모든 쿠키를 수락하거나, 쿠키를 수락하지 않거나, 원래 호스트의 쿠키만 수락하는 기능인 CookieManager를 제공합니다. 다른 정책으로 CookieManager를 설정하려면 CookiePolicy 인터페이스의 상수 ACCEPT_ALL, ACCEPT_NONE 또는 ACCEPT_ORIGINAL_SERVER 중 하나를 사용합니다. 아무 것도 설정하지 않을 경우 마지막 옵션은 기본값이 됩니다. 쿠키 관리자를 구성하려면 아래에 표시된 대로 적절한 상수로 setCookiePolicy 메소드를 호출하십시오.

   CookieManager manager = new CookieManager();
   manager.setCookiePolicy(CookiePolicy.ACCEPT_NONE);
   CookieHandler.setDefault(manager);

그리고 CookieStoreCookiePolicy 인수 모두를 수락하는 CookieManager에 대한 두 번째 구성자를 호출할 수 있습니다.

   CookieManager(CookieStore store, CookiePolicy cookiePolicy)

널 저장소에 전달되면 시스템이 사전 정의된 메모리 내장 버전을 사용합니다. 쿠키의 장기 스토리지를 제공하려면 고유한 인터페이스 구현을 정의할 수도 있습니다.

수정된 페치 프로그램 버전을 소개하기 전에 API 차이점을 하나 더 설명하겠습니다. 바로 쿠키 jar, err..., 관리자 등에서 쿠키 목록을 가져오는 방법입니다. CookieManager 클래스에는 CookieStore를 가져오는 getCookieStore 메소드가 있습니다. getCookies 메소드로 저장소에 쿠키 목록을 요청하면 목록 전체를 반복할 수 있습니다.

다음은 Java SE 6 버전의 쿠키 처리 API를 활용하는 이전 프로그램의 수정된 버전입니다. 기본 프로그램은 크게 변경되지 않았지만 지원되는 모든 사용자 정의 클래스는 이제 더 이상 필요하지 않습니다.

import java.io.*;
import java.net.*;
import java.util.*;

public class Fetch {
  public static void main(String args[]) throws Exception {
    Console console = System.console();
    if (args.length == 0) {
      System.err.println("URL missing");
      System.exit(-1);
    }
    String urlString = args[0];
    CookieManager manager = new CookieManager();
    manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
    CookieHandler.setDefault(manager);
    URL url = new URL(urlString);
    URLConnection connection = url.openConnection();
    Object obj = connection.getContent();
    url = new URL(urlString);
    connection = url.openConnection();
    obj = connection.getContent();
    CookieStore cookieJar = manager.getCookieStore();
    List<HttpCookie> cookies = cookieJar.getCookies();
    for (HttpCookie cookie: cookies) {
      console.printf("Cookie: %s%n", cookie);
    }
  }
}

특정 URL을 방문할 때 시스템에 쿠키가 남는지 확인하려면 프로그램을 컴파일하고 실행하십시오. ACCEPT_ALL을 사용할 수 없으면 http://www.sun.com/을 방문해도 쿠키가 표시되지 않지만 모두 사용 가능하게 설정하면 세 개가 표시됩니다. 여러분이 실행하면 다른 결과가 생성될 것입니다.

> java Fetch http://www.sun.com
Cookie: JROUTE=9999
Cookie: JSESSIONID=999999995d3f13ffffffffc68433979b7f5b0
Cookie: Starload=star-fep7

그렇습니다. J2SE 5.0 쿠키 처리 메커니즘에서 Java SE 6으로의 이동은 매우 쉽습니다. 기본 기능에 만족하면 추가로 인터페이스를 구현하지 않아도 됩니다.

"Java SE" 카테고리의 다른 글

2007/07/23 11:00 2007/07/23 11:00

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/412

  1. 쿠키 처리

    Tracked from Great H.K  삭제

    SDK6.0 부터 지원하나 보당.. 차분히 나중에 읽어봐야겠군...

    2007/09/11 14:46
  2. Java 쿠키 처리

    Tracked from ★ dingpong의 조그만 휴식 공간 ★  삭제

    쿠키 처리에 대한 문서입니다. 이 팁은 Java SE6 에서 작동합니다. [J2SE 5.0에서 수행하기 어려웠던 작업들이 Java SE 6에서는 기존 클래스를 활용한 간단한 작업이 되었습니다. ] 출처 : 본문 Java SE 6 에서 어떻게 하면 쿠키를 잘 이용 할 수 있는지에 대한 글입니다^-^ 쿠키를 이용 하시려는 분이면 꼭 봐

    2007/09/20 01:28
  3. 쿠키 처리

    Tracked from jinsoolife.  삭제

    이러한 팁은 Java SE 6을 사용하여 개발되었습니다. Java SE 6은 Java SE Downloads 페이지에서 다운로드할 수 있습니다. 이번 호 테크팁의 저자는 JZ Ventures사의 사장이자 주요 컨설턴트인 John Zukowski입니다. 이전에 다루었던 CookieHandler를 이용한 쿠키 관리 팁 에서는 J2SE 5.0이 네트워크 연결을 통해 쿠키 관리를 지원한다고 설명했습니다. 5.0 릴리스에서는 이러한 간략한 설명을 다루기...

    2008/06/24 01:42

댓글을 달아 주세요

  1. 송상화  수정/삭제  댓글쓰기

    좋은 예제 감사합니다...

    2007/09/04 15:45
  2. 이인호  수정/삭제  댓글쓰기

    음..좋은 정보인데요,.

    2007/09/05 10:30
  3. 정준혁  수정/삭제  댓글쓰기

    예제가 쉽게 설명되어 있어 좋습니다.

    2007/09/05 10:39
  4. 한승규  수정/삭제  댓글쓰기

    알고 싶던 정보였는데.. 감사 드립니다^^

    2007/09/05 20:02
  5. 맹범기  수정/삭제  댓글쓰기

    감사합니다.

    2007/09/06 00:21
  6. 신명  수정/삭제  댓글쓰기

    잘 읽었습니다.

    2007/09/07 13:18
  7. 강재훈  수정/삭제  댓글쓰기

    흠..

    2007/09/07 19:40
  8. 정유진  수정/삭제  댓글쓰기

    어렵네요.. 차근차근 읽어 보아야 겠습니다. 좋은 정보 감사드립니다.

    2007/09/08 23:43
  9. 이상수  수정/삭제  댓글쓰기

    잘 보았습니다 ..감사합니다!

    2007/09/10 14:02
  10. 조강래  수정/삭제  댓글쓰기

    좋은정보 유용하여 긁어갑니다.

    2007/09/10 15:36
  11. 고진구  수정/삭제  댓글쓰기

    쉬운 설명으로 읽으면 바로 쏫쏙 이해가 됩니다만.....
    시간이 너무 없어요.
    휴일에 시간내서 잘 읽어 보려구요.

    2007/09/10 22:37
  12. 최하영  수정/삭제  댓글쓰기

    휴... 겨우 다 읽었네요. 유익한 정보 감사합니다.

    2007/09/13 10:40
  13. 김문경  수정/삭제  댓글쓰기

    하나하나 알아가는 재미가 좋은데요^^

    2007/09/13 21:44
  14. 최선정  수정/삭제  댓글쓰기

    이해하는데 시간이 많이걸리네요~~
    더욱더 좋은정보 부탁드립니다..감사해요

    2007/09/14 18:03
  15. 권미자  수정/삭제  댓글쓰기

    하나하나 알아가는재미가 점점 생기네요..

    2007/09/15 19:06
  16. 박정숙  수정/삭제  댓글쓰기

    좋은 정보 감사해요~

    2007/09/19 03:24
  17. 김덕경  수정/삭제  댓글쓰기

    좋은자료 많이 많이 올려주세요..감사

    2007/09/19 06:45
  18. 이봉도  수정/삭제  댓글쓰기

    하나하나 알아가는재미가 점점 생겨서 좋습니다.

    2007/09/19 19:22
  19. 정금조  수정/삭제  댓글쓰기

    유용한 정보 감사합니다.

    2007/09/19 19:25
  20. 이종민  수정/삭제  댓글쓰기

    직접적인 개발자가 아니라서 정확한 세부사항까지 이해하기는 어려웠지만 나름 좋은 지식공유가 된것 같아서 기쁘네요... 앞으로도 좋은 지식발견이 되었으면 좋겠습니다. 감사합니다...!

    2007/09/19 21:09
  21. 최인균  수정/삭제  댓글쓰기

    좋은 팁 잘 봤습니다. 버전업 되면서 편하게 바뀐 것 같네요^^

    2007/09/20 01:29
  22. 홍재민  수정/삭제  댓글쓰기

    좋은 정보 감사합니다.

    2008/08/06 10:09
[로그인][오픈아이디란?]

◀ Prev 1  ... 233 234 235 236 237 238 239 240 241  ... 626  Next ▶