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

クラスHttpExchange

  • 直系の既知のサブクラス:
    HttpsExchange


    public abstract class HttpExchange
    extends Object
    このクラスは、一回の交換で、受信するHTTP要求と生成される応答をカプセル化します。 これは、クライアントからの要求の検査と、応答の作成と送信のための方法を提供します。

    次にHttpExchangeの一般的なライフ・サイクルを順番に示します。

    1. getRequestMethod()でコマンドを決定する
    2. getRequestHeaders()で必要に応じて要求ヘッダーを調べる
    3. getRequestBody()が要求本体を読み取るためのInputStreamを返す。 要求本体を読み取ったあと、ストリームが閉じる。
    4. getResponseHeaders()で、Content-Lengthを除くすべての応答ヘッダーを設定する
    5. sendResponseHeaders(int,long)で応答ヘッダーを送信する。 次のステップの前に呼び出す必要がある。
    6. getResponseBody()OutputStreamを取得して、応答本体を送信する。 応答本体が作成済みの場合は、ストリームを閉じて交換を終了する必要がある。
    交換の終了
    交換は、要求InputStreamと応答OutputStreamが両方とも閉じられると終了します。
    OutputStreamを閉じると、InputStreamも暗黙的に閉じられます(まだ閉じられていない場合)。 ただし、閉じる前に、InputStreamからのすべてのデータを使用することをお勧めします。 簡易メソッドclose()はこれらのタスクをすべて実行します。 要求本体のすべてを使用せずに交換を閉じてもエラーではありませんが、基本となるTCP接続を次の交換用に利用できなくなる場合があります。 交換の終了に失敗した場合の結果は定義されていませんが、通常はリソースの解放や再利用に失敗します。
    導入されたバージョン:
    1.6
    • コンストラクタのサマリー

      コンストラクタ 
      修飾子 コンストラクタ 説明
      protected HttpExchange​()  
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 抽象メソッド 
      修飾子と型 メソッド 説明
      abstract void close​()
      以下を順番に実行してこの交換を終了: リクエストを閉じるInputStream(まだ閉じていない場合); まだ閉じていなければ、レスポンスOutputStreamを閉じます。
      abstract Object getAttribute​(String name)
      フィルタ・モジュールは、帯域外通信メカニズムとしてHttpExchangeインスタンスを持つ任意のオブジェクトを格納できます。
      abstract HttpContext getHttpContext​()
      この交換のHttpContextを取得します。
      abstract InetSocketAddress getLocalAddress​()
      要求を受信したローカル・アドレスを返します。
      abstract HttpPrincipal getPrincipal​()
      オーセンティケータが、この交換を所有するHttpContextに設定されている場合、このメソッドは、このHttpExchangeに対して認証されたユーザーを表すHttpPrincipalを返します。
      abstract String getProtocol​()
      protocol/majorVersion.minorVersionの形式で要求からのプロトコル文字列を返します。
      abstract InetSocketAddress getRemoteAddress​()
      この要求を呼び出すリモート・エンティティのアドレスを返します。
      abstract InputStream getRequestBody​()
      要求本体を読み取ることができるストリームを返します。
      abstract Headers getRequestHeaders​()
      この要求に組み込まれたHTTPヘッダーを含む不変のマップを返します。
      abstract String getRequestMethod​()
      要求メソッドを取得します。
      abstract URI getRequestURI​()
      要求URIを取得します。
      abstract OutputStream getResponseBody​()
      応答本体の書込み先となるストリームを返します。
      abstract int getResponseCode​()
      応答コードがすでに設定されている場合は、それを返します。
      abstract Headers getResponseHeaders​()
      HTTP応答ヘッダーを格納でき、この応答の一部として送信される、変更可能なマップを返します。
      abstract void sendResponseHeaders​(int rCode, long responseLength)
      応答ヘッダーと数値の応答コードの現在のセットをこのメソッドの指定どおりに使用して、クライアントへの応答の送返しを開始します。
      abstract void setAttribute​(String name, Object value)
      フィルタ・モジュールは、帯域外通信メカニズムとしてHttpExchangeインスタンスを持つ任意のオブジェクトを格納できます。
      abstract void setStreams​(InputStream i, OutputStream o)
      フィルタされる特定のストリームで、この交換のInputStreamとOutputStreamのいずれかまたは両方をラップするためにフィルタで使用されます。これにより、getRequestBody()の後続の呼出しは指定されたInputStreamを返し、getResponseBody()の後続の呼出しは指定されたOutputStreamを返します。
    • コンストラクタの詳細

      • HttpExchange

        protected HttpExchange​()
    • メソッドの詳細

      • getRequestHeaders

        public abstract Headers getRequestHeaders​()
        この要求に組み込まれたHTTPヘッダーを含む不変のマップを返します。 このマップ内のキーはヘッダー名になり、値は、組み込まれた各値を含む文字列のリストになります。これは、複数回指定されたヘッダー、または単一行のカンマで区切られた値のリストを受け入れるヘッダーの値です。 このどちらの場合も、ヘッダー名の値は、要求に組み込まれた順序で表示されます。

        マップ内のキーでは大文字と小文字が区別されません。

        戻り値:
        要求ヘッダーへのアクセスに使用できる読取り専用マップ
      • getResponseHeaders

        public abstract Headers getResponseHeaders​()
        HTTP応答ヘッダーを格納でき、この応答の一部として送信される、変更可能なマップを返します。 マップ内のキーはヘッダー名になり、値は、各値を含む文字列のリストにする必要があります。その文字列は、複数回組み込む各値が、組み込む順序で含まれます。

        マップ内のキーでは大文字と小文字が区別されません。

        戻り値:
        応答ヘッダーの設定に使用できる書込み可能なマップ。
      • getRequestURI

        public abstract URI getRequestURI​()
        要求URIを取得します。
        戻り値:
        要求URI
      • getRequestMethod

        public abstract String getRequestMethod​()
        要求メソッドを取得します。
        戻り値:
        要求メソッド
      • getHttpContext

        public abstract HttpContext getHttpContext​()
        この交換のHttpContextを取得します。
        戻り値:
        HttpContext
      • close

        public abstract void close​()
        次の順序どおりに実行することで、この交換を終了します。
        1. まだ閉じていない場合は、要求InputStreamを閉じる。;
        2. まだ閉じていない場合は、応答OutputStreamを閉じる。
      • getRequestBody

        public abstract InputStream getRequestBody​()
        要求本体を読み取ることができるストリームを返します。 このメソッドを複数回呼び出した場合でも、同じストリームが返されます。 閉じる前に、このストリームからのすべてのデータをアプリケーションで使用する(読み取る)ことをお勧めします。 すべてのデータを読み取る前にストリームが閉じられると、close()呼出しによって、残りのデータが実装固有のバイト数だけ読み取られ、破棄されます。
        戻り値:
        要求本体を読み取ることができるストリーム。
      • getResponseBody

        public abstract OutputStream getResponseBody​()
        応答本体の書込み先となるストリームを返します。このメソッドを呼び出す前にsendResponseHeaders(int,long))を呼び出す必要があります。 同一の交換用にこのメソッドを複数回呼び出した場合でも、同じストリームが返されます。 それぞれの交換を正しく終了させるためには、応答本体を送信しない場合でも、出力ストリームを閉じる必要があります。

        このストリームを閉じると、getRequestBody()から返されたInputStreamが暗黙的に閉じられます(まだ閉じられていない場合)。

        sendResponseHeaders()の呼出しで応答本体の固定長が指定された場合、その呼出しに指定された正確なバイト数をこのストリームに書き込む必要があります。 書き込まれるバイトが多すぎると、write()によりIOExceptionがスローされます。 書き込まれるバイトが少なすぎると、close()によりIOExceptionがスローされます。 どちらの場合も、交換は中止され、基本となるTCP接続は閉じられます。

        戻り値:
        応答本体の書込み先のストリーム
      • sendResponseHeaders

        public abstract void sendResponseHeaders​(int rCode,
                                                 long responseLength)
                                          throws IOException
        応答ヘッダーと数値の応答コードの現在のセットをこのメソッドの指定どおりに使用して、クライアントへの応答の送返しを開始します。 応答本体の長さも、次のように指定されます。 応答の長さパラメータがゼロより大きい場合は、送信する正確なバイト数が指定され、アプリケーションはその正確なデータ量を送信する必要があります。 応答の長さパラメータがzeroの場合は、チャンク転送エンコーディングが使用され、任意のデータ量を送信できます。 アプリケーションは、OutputStreamを閉じることで応答本体を終了します。 応答の長さに値-1が含まれている場合、応答本体は送信されません。

        Content-Length応答ヘッダーがまだ設定されていない場合は、応答の長さパラメータに応じて適切な値に設定されます。

        このメソッドは、getResponseBody()を呼び出す前に呼び出す必要があります。

        パラメータ:
        rCode - 送信する応答コード
        responseLength - > 0,が固定レスポンス本文の長さを指定し、正確なバイト数がgetResponseBody()から取得されたストリームに書き込まれなければならない場合、または0に等しい場合、チャンク符号化が使用され、任意のバイト数が書き込まれます。<= -1の場合、レスポンス本文の長さは指定されず、レスポンス本文は書き込まれません。
        例外:
        IOException
        関連項目:
        getResponseBody()
      • getRemoteAddress

        public abstract InetSocketAddress getRemoteAddress​()
        この要求を呼び出すリモート・エンティティのアドレスを返します。
        戻り値:
        呼出し側のInetSocketAddress
      • getResponseCode

        public abstract int getResponseCode​()
        応答コードがすでに設定されている場合は、それを返します。
        戻り値:
        使用可能な場合は、応答コード。まだ使用可能でない場合は、-1
      • getLocalAddress

        public abstract InetSocketAddress getLocalAddress​()
        要求を受信したローカル・アドレスを返します。
        戻り値:
        ローカル・インタフェースのInetSocketAddress
      • getProtocol

        public abstract String getProtocol​()
        protocol/majorVersion.minorVersionの形式で要求からのプロトコル文字列を返します。 たとえば、「HTTP/1.1」です。
        戻り値:
        要求からのプロトコル文字列
      • getAttribute

        public abstract Object getAttribute​(String name)
        フィルタ・モジュールは、帯域外通信メカニズムとしてHttpExchangeインスタンスを持つ任意のオブジェクトを格納できます。 その他のフィルタや交換ハンドラは、これらのオブジェクトにアクセスできます。

        各フィルタ・クラスは、それらによって使用可能になる属性を文書化します。

        パラメータ:
        name - 取得する属性の名前
        戻り値:
        属性オブジェクト。存在しない場合はnull
        例外:
        NullPointerException - nameがnullの場合
      • setAttribute

        public abstract void setAttribute​(String name,
                                          Object value)
        フィルタ・モジュールは、帯域外通信メカニズムとしてHttpExchangeインスタンスを持つ任意のオブジェクトを格納できます。 その他のフィルタや交換ハンドラは、これらのオブジェクトにアクセスできます。

        各フィルタ・クラスは、それらによって使用可能になる属性を文書化します。

        パラメータ:
        name - 属性値に関連付ける名前
        value - 属性値として格納するオブジェクト。null値が許可される。
        例外:
        NullPointerException - nameがnullの場合
      • setStreams

        public abstract void setStreams​(InputStream i,
                                        OutputStream o)
        フィルタされる特定のストリームで、この交換のInputStreamとOutputStreamのいずれかまたは両方をラップするためにフィルタで使用されます。これにより、getRequestBody()の後続の呼出しは指定されたInputStreamを返し、getResponseBody()の後続の呼出しは指定されたOutputStreamを返します。 この呼出しに提供されたストリームは、オリジナルのストリームをラップする必要があります。また、FilterInputStreamおよびFilterOutputStreamのサブクラスである可能性があります(ただし、そうである必要はありません)。
        パラメータ:
        i - このオブジェクトの入力ストリームとして設定する、フィルタされる入力ストリーム。変更がない場合はnull
        o - このオブジェクトの出力ストリームとして設定する、フィルタされる出力ストリーム。変更がない場合はnull
      • getPrincipal

        public abstract HttpPrincipal getPrincipal​()
        オーセンティケータが、この交換を所有するHttpContextに設定されている場合、このメソッドは、このHttpExchangeに対して認証されたユーザーを表すHttpPrincipalを返します。
        戻り値:
        HttpPrincipal。オーセンティケータが設定されていない場合はnull