2010-12-28 2 views
4

CookieHandlerがシステム全体でどのように動作するのかわかりませんが、CookieHandlerのソースを表示しましたが、get/setメソッド以外の情報は見つかりませんでした。 TCP/HTTP接続はどこで設定したCookieHandlerのインスタンスを使用しますかJava、CookieHandlerを1つのインスタンスでしか動作させない

CookieHandler.setDefault(...) 

どのソースファイルを参照する必要がありますか? URLConnection & HttpURLConnectionとは関係ありません。

ヘルプ、ありがとうございます。


編集: setDefaultが呼び出された1つのインスタンスにCookieHandlerを適用することは可能ですか?

+0

よう

private final CookieManager ownCookieManager = new CookieManager(); 

を使用しますクラスでインスタンス化されますました。この[ページ](http://docs.oracle.com/javase/tutorial/networking/cookies/cookiehandler.html)には、「つまり、プロトコルとしてHTTPを使用するURL」、新しいURL "http://example.com")は、HTTPプロトコルハンドラを使用します。このプロトコルハンドラは、設定されている場合、状態管理を処理するためにCookieHanderオブジェクトをコールバックします。 –

答えて

0

。CookieHandlerのは、中にどのように適合するかのかなり良い概要を説明しますが、何の状態を持っていません代議員には

private static final ThreadLocal<CookieManager> delegate = 
    new ThreadLocal<CookieManager>(); 

私は同じことを思ってきたそれは

delegate.set(ownCookieManager); 
doRequest(); 
+0

私はHttpClient、 'setCookieStore'メソッドに注目しました。 – user435657

+0

@ user435657それはおそらく行く方法です。これは、メガバイトのコードのほんの一部が、1行( 'Cookie' /' Set-Cookie')を解析して書くのにあまりにも似ているということです。 – maaartinus

1

javadoc for java.net.CookieManagerは私が

static { 
    CookieHandler.setDefault(new DelegatingCookieManager()); 
} 

グローバルにインストールされます。この

private static class DelegatingCookieManager extends CookieManager { 
    @Override public void setCookiePolicy(CookiePolicy cookiePolicy) { 
     delegate.get().setCookiePolicy(cookiePolicy); 
    } 

    @Override public CookieStore getCookieStore() { 
     return delegate.get().getCookieStore(); 
    } 

    @Override public Map<String, List<String>> get(
      URI uri, Map<String, List<String>> requestHeaders) 
      throws IOException { 
     return delegate.get().get(uri, requestHeaders); 
    } 

    @Override public void put(URI uri, Map<String, 
      List<String>> responseHeaders) 
      throws IOException { 
     delegate.get().put(uri, responseHeaders); 
    } 
} 

を使用して作業それを得た

関連する問題