java.lang.Object
com.sun.net.httpserver.HttpExchange
- 直系の既知のサブクラス:
HttpsExchange
public abstract class HttpExchange extends Object
このクラスは、一回の交換で、受信するHTTP要求と生成される応答をカプセル化します。 これは、クライアントからの要求の検査と、応答の作成と送信のための方法を提供します。
交換は、要求InputStreamと応答OutputStreamが両方とも閉じられると終了します。 OutputStreamを閉じると、InputStreamも暗黙的に閉じられます(まだ閉じられていない場合)。 ただし、閉じる前に、InputStreamからのすべてのデータを使用することをお勧めします。 簡易メソッド
次にHttpExchangeの一般的なライフ・サイクルを順番に示します。
getRequestMethod()
でコマンドを決定するgetRequestHeaders()
で必要に応じて要求ヘッダーを調べるgetRequestBody()
が要求本体を読み取るためのInputStream
を返す。 リクエスト本文の読取り後、ストリームは閉じておく必要があります。getResponseHeaders()
で、Content-Lengthを除くすべての応答ヘッダーを設定するsendResponseHeaders(int,long)
で応答ヘッダーを送信する。 次のステップの前に呼び出す必要がある。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()次の順序どおりに実行することで、この交換を終了します。- まだ閉じていない場合は、要求InputStreamを閉じる。;
- まだ閉じていない場合は、応答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()
を呼び出す前に呼び出す必要があります。- 実装上の注意:
- この実装によって、コール元は、交換終了後に
Connection: close
ヘッダーを「レスポンス・ヘッダー」に提供して、sendResponseHeaders
の呼出し前に接続を強制的にクローズするようにサーバーに指示できます。 - パラメータ:
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
フィルタ・モジュールは、帯域外通信メカニズムとしてHttpExchangeインスタンスを持つ任意のオブジェクトを格納できます。 その他のフィルタや交換ハンドラは、これらのオブジェクトにアクセスできます。各フィルタ・クラスは、それらによって使用可能になる属性を文書化します。
- パラメータ:
name
- 取得する属性の名前- 戻り値:
- 属性オブジェクト。存在しない場合はnull
- 例外:
NullPointerException
- nameがnull
の場合
-
setAttribute
フィルタ・モジュールは、帯域外通信メカニズムとして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
。
-