1. ホーム
  2. java

[解決済み] Apache HttpClient APIにおけるCloseableHttpClientとHttpClientの違いは何ですか?

2022-12-03 09:54:03

質問

弊社で開発したアプリケーションを勉強しています。それは、Apache HttpClientライブラリを使用します。ソースコードでは、それは HttpClient クラスを使用して、サーバーに接続するためのインスタンスを作成します。

私はApache HttpClientについて学びたいと思い、以下のことを調べました。 この例のセット . すべての例では CloseableHttpClient の代わりに HttpClient . ということで、私は CloseableHttpClient の拡張版であり HttpClient . もしそうであれば、私は2つの質問があります。

  • これらの 2 つの違いは何ですか。
  • 新規開発にはどちらのクラスを使用するのがよいですか?

どのように解決するのですか?

  • HttpClient API の主なエントリポイントは、HttpClient インターフェースです。
  • HttpClientの最も本質的な機能は、HTTPメソッドを実行することです。
  • HTTPメソッドの実行には、通常HttpClientが内部で処理する1つまたは複数のHTTPリクエスト/HTTPレスポンスの交換が含まれます。

  • CloseableHttpClientは、HttpClientの基本実装であり、java.io.Closeableも実装している抽象クラスです。
  • 最も単純な形でのリクエスト実行処理の例です。

    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpGet httpget = new HttpGet("http://localhost/");
    CloseableHttpResponse response = httpclient.execute(httpget); CloseableHttpResponse response = httpclient.execute(httpget);
    try {
        //何かをする
    } finally {
        response.close()を実行します。
    }
    

  • HttpClientのリソースを解放しました。 インスタンスCloseableHttpClientが不要になり、スコープ外に出ようとするとき、CloseableHttpClient#close()メソッドを呼んで、それに関連する接続マネージャをシャットダウンしなければなりません。

    CloseableHttpClient httpclient = HttpClients.createDefault();
    try {
        //何かする
    } finally {
        httpclient.close()を実行します。
    }
    

を参照してください。 参照 を参照してください。


スカッジ Java 7以降では トライウィズリソース ステートメントを使用すると、ステートメントの最後で各リソースが閉じられることを保証します。これは、クライアントと各レスポンスの両方に使用することができます。

try(CloseableHttpClient httpclient = HttpClients.createDefault()){

    // e.g. do this many times
    try (CloseableHttpResponse response = httpclient.execute(httpget)) {
    //do something
    }

    //do something else with httpclient here
}