モジュール jdk.httpserver
パッケージ com.sun.net.httpserver

クラスHttpHandlers

java.lang.Object
com.sun.net.httpserver.HttpHandlers

public final class HttpHandlers extends Object
静的レスポンス・ハンドラなどの様々な有用なハンドラ、または1つのハンドラを別のハンドラに補完する条件ハンドラを実装するHttpHandlerの実装。

ファクトリ・メソッドof(int, Headers, String)は、事前に設定された静的レスポンス状態を持つハンドラを作成する手段を提供します。 たとえば、常に同じjsonを持つ200を返すjsonHandlerです:


    HttpHandlers.of(200,
                    Headers.of("Content-Type", "application/json"),
                    Files.readString(Path.of("some.json")));
 
または常に405で返信するnotAllowedHandler - メソッドは許可されず、許可されるメソッドのセットを示します:

    HttpHandlers.of(405, Headers.of("Allow", "GET"), "");
 

ハンドラの機能を拡張または拡張するには、handleOrElseを使用します。これにより、特定のハンドラを補完できます。 たとえば、jsonHandlernotAllowedHandlerで補完します:


    Predicate<Request> IS_GET = r -> r.getRequestMethod().equals("GET");
    var handler = HttpHandlers.handleOrElse(IS_GET, jsonHandler, notAllowedHandler);
 
前述のhandleOrElse handlerは、if-elseのような構造を提供します。リクエスト・メソッドが"GET"の場合、交換の処理はjsonHandlerに委任され、それ以外の場合は交換の処理はnotAllowedHandlerに委任されます。

導入されたバージョン:
18
  • メソッドの詳細

    • handleOrElse

      public static HttpHandler handleOrElse(Predicate<Request> handlerTest, HttpHandler handler, HttpHandler fallbackHandler)
      条件付きHttpHandlerを別のハンドラで補完します。

      このメソッドは、handleOrElseハンドラ(if-else like構文)を作成します。 リクエストがhandlerTest述語に一致するExchangesは、handlerによって処理されます。 残りの交換はすべてfallbackHandlerによって処理されます。

      ネストされたhandleOrElseハンドラの例:

      
          Predicate<Request> IS_GET = r -> r.getRequestMethod().equals("GET");
          Predicate<Request> WANTS_DIGEST =  r -> r.getRequestHeaders().containsKey("Want-Digest");
      
          var h1 = new SomeHandler();
          var h2 = HttpHandlers.handleOrElse(IS_GET, new SomeGetHandler(), h1);
          var h3 = HttpHandlers.handleOrElse(WANTS_DIGEST.and(IS_GET), new SomeDigestHandler(), h2);
       
      h3 handleOrElseハンドラは、"Want-Digest"リクエスト・ヘッダーが存在し、リクエスト・メソッドがGETの場合、交換の処理をSomeDigestHandlerに委任します。それ以外の場合は、交換の処理をh2ハンドラに委任します。 h2 handleOrElseハンドラは、リクエスト・メソッドがGETの場合、 SomeGetHandlerに交換の処理を委任します。それ以外の場合は、交換の処理をh1ハンドラに委任します。 h1ハンドラは、以前にSomeGetHandlerまたはSomeDigestHandlerに委任されていないすべての交換を処理します。

      パラメータ:
      handlerTest - リクエスト述語
      handler - 条件付きハンドラ
      fallbackHandler - フォールバック・ハンドラ
      戻り値:
      ハンドラ
      例外:
      NullPointerException - いずれかの引数がnullの場合
    • of

      public static HttpHandler of(int statusCode, Headers headers, String body)
      指定されたstatusCodeheadersおよびbodyで構成されるレスポンスを送信するHttpHandlerを返します。

      このメソッドは、リクエスト本文を読取りおよび破棄してレスポンス状態を設定し、レスポンスを送信するハンドラを作成します。

      headersは、レスポンスの有効なヘッダーです。 レスポンス「本文バイト」は、bodyUTF-8エンコード・バイト・シーケンスです。 指定されたstatusCodeおよび本文バイトの長さが(本文が空の場合は-1)のレスポンス・ヘッダー「送信済」 ボディ・バイトは、本文が空でないかぎりレスポンス本文として送信され、その場合はレスポンス本文が送信されません。

      パラメータ:
      statusCode - レスポンス・ステータス・コード
      headers - ヘッダー
      body - レスポンス本文文字列
      戻り値:
      ハンドラ
      例外:
      IllegalArgumentException - rfc2616に従って、statusCodeが正の3桁の整数でない場合、セクション6.1.1
      NullPointerException - ヘッダーまたは本文がnullの場合