Java 9のHTTP/2クライアントAPIとは?HttpClient・HttpRequest・HttpResponseの3つの主要クラスを解説
Java 9におけるHTTP/2クライアントAPIの概要
HTTP/2は、従来のHTTPプロトコルの新しいバージョンです。HTTP/2の主な改善点は、サーバーとクライアント間でデータがどのようにフレーミングされ、転送されるかに焦点が当てられています。この新しいHTTP/2プロトコルでは、HTTPクライアント、リクエスト、レスポンスそれぞれに対して個別のクラスが定義されています。
新しいAPIを利用することで、HTTP接続の維持がより簡単になり、通信速度も向上します。さらに、サードパーティ製のライブラリに依存することなく、応答性の高いアプリケーションを構築できるようになりました。
HTTP接続を扱う3つのコアクラス
新しいAPIは、以下の3つのクラスを通じてHTTP接続を処理します。
- HttpClient: リクエストの作成と送信を担当するクラスです。
- HttpRequest: HttpClient経由で送信するリクエストを構築するために使用されます。
- HttpResponse: 送信されたリクエストに対するレスポンスを保持します。
実装例:URLへのリクエスト送信とレスポンス取得
以下のコードスニペットでは、特定のURLにリクエストを送信し、そのレスポンスを受け取る方法を示しています。
// HttpClientオブジェクトを作成
HttpClient httpClient = HttpClient.newHttpClient();
System.out.println(httpClient.version());
// HTTPリクエストを構築
// 指定したURIに対するGETリクエストを作成
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(new URI("https://www.tutorialspoint.com/"))
.GET()
.build();
// リクエストヘッダーを取得して表示
Map<String, List<String>> headers = httpRequest.headers().map();
headers.forEach((k, v) -> System.out.println(k + " - " + v));
// リクエストを送信
HttpResponse httpResponse =
httpClient.send(httpRequest, HttpResponse.BodyHandler.asString());
// レスポンスボディを出力
System.out.println("Response: " + httpResponse.body());
まとめ
Java 9で導入されたHTTP/2クライアントAPIは、HttpClientでリクエストの送信を管理し、HttpRequestでリクエストを構築し、HttpResponseでレスポンスを受け取るという明確な役割分担が特徴です。これにより、外部ライブラリを使わずにモダンで効率的なHTTP通信を実装できるようになりました。
-
Java 9 JShellの起動スクリプト(DEFAULT・JAVASE・PRINTING)の違いと使い方
JShellは、Java 9で導入された対話型のJavaシェルツールです。コマンドラインプロンプトから起動でき、入力したコードをその場で評価して結果を即座に表示します。いわゆるREPL(Read-Evaluate-Print-Loop:読み込み→評価→表示→繰り返し)ツールとして動作するため、コード断片の動作確認やAPIの学習に非常に便利です。 起動スクリプトの指定方法(--startupフラグ) JShellでは、起動時にスクリプトを読み込むことで、あらかじめ定義済みのimport文や便利なメソッドを使える状態でセッションを開始できます。起動スクリプトを指定するには「--startup」フ
-
Java 9のJShellで使える「/edit」コマンドの種類と使い方
JShellは、Java 9で導入されたコマンドラインツールです。main()メソッドを用意しなくても、宣言・ステートメント・式をその場で評価できるのが大きな特徴です。さらに、JShellにはJShell Edit Padという簡易テキストエディタが組み込まれており、「/edit」コマンドで起動することで、入力済みのコードを手軽に編集できます。 /editコマンドの3つの形式 JShellで利用できる「/edit」コマンドには、次の3つの形式があります。 /edit /edit [ID] /edit [コード名] /edit:引数なしで実行すると、現在アクティブなすべてのコードがテキストエデ