- すべての実装されたインタフェース:
Request
,AutoCloseable
- 直系の既知のサブクラス:
HttpsExchange
HttpExchange
の一般的なライフサイクルを次の順序で示します:
getRequestMethod()
でコマンドを決定するgetRequestHeaders()
を使用して、リクエスト・ヘッダー(必要に応じて)を調べます。getRequestBody()
は、リクエスト本文を読み取るためのInputStream
を返します。 リクエスト本文の読取り後、ストリームは閉じておく必要があります。getResponseHeaders()
で、Content-Lengthを除くすべての応答ヘッダーを設定するsendResponseHeaders(int,long)
で応答ヘッダーを送信する。 次のステップの前に呼び出す必要がある。getResponseBody()
でOutputStream
を取得して、応答本体を送信する。 応答本体が作成済みの場合は、ストリームを閉じて交換を終了する必要がある。
交換は、リクエスト
InputStream
とレスポンスOutputStream
の両方が閉じられると終了します。 OutputStream
をクローズすると、InputStream
(まだ閉じていない場合)が暗黙的にクローズされます。 ただし、閉じる前にInputStream
のすべてのデータを使用することをお薦めします。 簡易メソッドclose()
はこれらのタスクをすべて実行します。 要求本体のすべてを使用せずに交換を閉じてもエラーではありませんが、基本となるTCP接続を次の交換用に利用できなくなる場合があります。 交換の終了に失敗した場合の結果は定義されていませんが、通常はリソースの解放や再利用に失敗します。 - 導入されたバージョン:
- 1.6
-
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明abstract void
close()
以下を順番に実行してこの交換を終了: まだ閉じていない場合は、リクエストInputStream
を閉じます。abstract Object
getAttribute
(String name) Filter
モジュールは、バンド外通信メカニズムとしてHttpExchange
インスタンスとともに任意のオブジェクトを格納できます。abstract HttpContext
この交換のHttpContext
を返します。abstract InetSocketAddress
要求を受信したローカル・アドレスを返します。abstract HttpPrincipal
この交換を所有するHttpContext
にオーセンティケータが設定されている場合、このメソッドは、このHttpExchange
の認証済ユーザーを表すHttpPrincipal
を返します。abstract String
protocol/majorVersion.minorVersionの形式で要求からのプロトコル文字列を返します。abstract InetSocketAddress
この要求を呼び出すリモート・エンティティのアドレスを返します。abstract InputStream
要求本体を読み込むことができるストリームを返します。abstract Headers
このリクエストに含められたHTTPヘッダーを含む不変のHeaders
を返します。abstract String
リクエスト・メソッドを返します。abstract URI
リクエストURI
を返します。abstract OutputStream
応答本体の書込み先となるストリームを返します。abstract int
応答コードがすでに設定されている場合は、それを返します。abstract Headers
HTTPレスポンス・ヘッダーを格納でき、このレスポンスの一部として転送される可変Headers
を返します。abstract void
sendResponseHeaders
(int rCode, long responseLength) 応答ヘッダーと数値の応答コードの現在のセットをこのメソッドの指定どおりに使用して、クライアントへの応答の送返しを開始します。abstract void
setAttribute
(String name, Object value) Filter
モジュールは、バンド外通信メカニズムとしてHttpExchange
インスタンスとともに任意のオブジェクトを格納できます。abstract void
「フィルタ」がこの交換InputStream
およびOutputStream
の(またはその両方)を、指定されたフィルタリングされたストリームとともにラップするために使用します。これにより、getRequestBody()
への後続の呼出しは指定されたInputStream
を返し、getResponseBody()
への呼出しは指定されたOutputStream
を返します。
-
コンストラクタの詳細
-
HttpExchange
protected HttpExchange()サブクラスが呼び出すためのコンストラクタ。
-
-
メソッドの詳細
-
getRequestHeaders
public abstract Headers getRequestHeaders()このリクエストに含められたHTTPヘッダーを含む不変のHeaders
を返します。この
Headers
のキーはヘッダー名ですが、値は「文字列」のList
で、リクエストに含まれる各値を含む順序で含まれます。 複数回表示されるヘッダー・フィールドは、複数の文字列値として表されます。Headers
のキーでは、大文字と小文字は区別されません。- 定義:
- インタフェース
Request
内のgetRequestHeaders
- 戻り値:
- リクエスト・ヘッダーへのアクセスに使用できる読取り専用
Headers
。
-
getResponseHeaders
public abstract Headers getResponseHeaders()HTTPレスポンス・ヘッダーを格納でき、このレスポンスの一部として転送される可変Headers
を返します。Headers
のキーはヘッダー名で、値は(含める順序)を複数回含める必要がある各値を含む「文字列」のList
である必要があります。Headers
のキーでは、大文字と小文字は区別されません。- 戻り値:
- レスポンス・ヘッダーの設定に使用できる書込み可能な
Headers
。
-
getRequestURI
public abstract URI getRequestURI()リクエストURI
を返します。- 定義:
- インタフェース
Request
内のgetRequestURI
- 戻り値:
- リクエスト
URI
-
getRequestMethod
public abstract String getRequestMethod()リクエスト・メソッドを返します。- 定義:
- インタフェース
Request
内のgetRequestMethod
- 戻り値:
- リクエスト・メソッド文字列
-
getHttpContext
public abstract HttpContext getHttpContext()この交換のHttpContext
を返します。- 戻り値:
- the
HttpContext
-
close
public abstract void close()次の順序どおりに実行することで、この交換を終了します。- まだ閉じていない場合は、リクエスト
InputStream
を閉じます。 - まだ閉じていない場合は、レスポンス
OutputStream
を閉じます。
- 定義:
close
、インタフェース:AutoCloseable
- まだ閉じていない場合は、リクエスト
-
getRequestBody
public abstract InputStream getRequestBody()要求本体を読み込むことができるストリームを返します。 このメソッドを複数回呼び出した場合でも、同じストリームが返されます。 閉じる前に、このストリームからのすべてのデータをアプリケーションで使用する(読み取る)ことをお勧めします。 すべてのデータが読み取られる前にストリームがクローズされた場合、InputStream.close()
コールは残りのデータ(実装固有のバイト数まで)を読み取り、破棄します。- 戻り値:
- 要求本体を読み取ることができるストリーム
-
getResponseBody
public abstract OutputStream getResponseBody()レスポンス本文を書き込む必要があるストリームを返します。sendResponseHeaders(int,long)
)は、このメソッドをコールする前にコールする必要があります。 同一の交換用にこのメソッドを複数回呼び出した場合でも、同じストリームが返されます。 それぞれの交換を正しく終了させるためには、応答本体を送信しない場合でも、出力ストリームを閉じる必要があります。このストリームをクローズすると、
getRequestBody()
(まだ閉じていない場合)から返されたInputStream
が暗黙的にクローズされます。sendResponseHeaders(int, long)
へのコールでレスポンス本文の固定長が指定されている場合は、そのコールで指定された正確なバイト数をこのストリームに書き込む必要があります。 書き込まれるバイトが多すぎる場合、OutputStream
のwriteメソッドはIOException
をスローします。 書き込まれるバイトが少なすぎる場合、ストリームOutputStream.close()
はIOException
をスローします。 どちらの場合も、交換は中止され、基本となるTCP接続は閉じられます。- 戻り値:
- 応答本体の書込み先のストリーム
-
sendResponseHeaders
public abstract void sendResponseHeaders(int rCode, long responseLength) throws IOException 応答ヘッダーと数値の応答コードの現在のセットをこのメソッドの指定どおりに使用して、クライアントへの応答の送返しを開始します。 応答本体の長さも、次のように指定されます。 レスポンス長パラメータがzero
より大きい場合は、送信する正確なバイト数を指定し、アプリケーションはその正確な量のデータを送信する必要があります。 応答の長さパラメータがzero
の場合は、チャンク転送エンコーディングが使用され、任意のデータ量を送信できます。 アプリケーションは、OutputStream
を閉じることでレスポンス本文を終了します。 応答の長さに値-1
が含まれている場合、応答本体は送信されません。Content-Length応答ヘッダーがまだ設定されていない場合は、応答の長さパラメータに応じて適切な値に設定されます。
このメソッドは、
getResponseBody()
を呼び出す前に呼び出す必要があります。- 実装上のノート:
- この実装によって、コール元は、交換終了後に
Connection: close
ヘッダーを「レスポンス・ヘッダー」に提供して、sendResponseHeaders
の呼出し前に接続を強制的にクローズするようにサーバーに指示できます。 - パラメータ:
rCode
- 送信する応答コードresponseLength
- > 0,がレスポンス本文の固定長を指定し、getResponseCode()
から取得したストリームに正確なバイト数を書き込む必要がある場合、== 0,ではチャンク・エンコーディングが使用され、任意のバイト数を書き込むことができます。 <= -1の場合、レスポンス本文の長さは指定されず、レスポンス本文は書き込まれません。- 例外:
IOException
- レスポンス・ヘッダーがすでに送信されている場合、またはI/Oエラーが発生した場合- 関連項目:
-
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
Filter
モジュールは、バンド外通信メカニズムとしてHttpExchange
インスタンスとともに任意のオブジェクトを格納できます。 その後、他のフィルタまたは交換ハンドラがこれらのオブジェクトにアクセスできます。各
Filter
クラスは、使用可能にする属性をドキュメント化します。- パラメータ:
name
- 取得する属性の名前- 戻り値:
- 属性オブジェクト。存在しない場合は
null
- 例外:
NullPointerException
- nameがnull
の場合
-
setAttribute
Filter
モジュールは、バンド外通信メカニズムとしてHttpExchange
インスタンスとともに任意のオブジェクトを格納できます。 その後、他のフィルタまたは交換ハンドラがこれらのオブジェクトにアクセスできます。各
Filter
クラスは、使用可能にする属性をドキュメント化します。- パラメータ:
name
- 属性値に関連付ける名前value
- 属性値として格納するオブジェクト。null
値が許可される。- 例外:
NullPointerException
- nameがnull
の場合
-
setStreams
public abstract void setStreams(InputStream i, OutputStream o) 「フィルタ」がこの交換InputStream
およびOutputStream
の(またはその両方)を、指定されたフィルタリングされたストリームとともにラップするために使用します。これにより、getRequestBody()
への後続の呼出しは指定されたInputStream
を返し、getResponseBody()
への呼出しは指定されたOutputStream
を返します。 この呼出しに提供されたストリームは、オリジナルのストリームをラップする必要があります。また、FilterInputStream
およびFilterOutputStream
のサブクラスである可能性があります(ただし、そうである必要はありません)。- パラメータ:
i
- このオブジェクトInputstream
として設定する、フィルタ処理された入力ストリーム。変更がない場合はnull
o
- このオブジェクトOutputstream
として設定する、フィルタ処理された出力ストリーム。変更がない場合はnull
-
getPrincipal
public abstract HttpPrincipal getPrincipal()この交換を所有するHttpContext
にオーセンティケータが設定されている場合、このメソッドは、このHttpExchange
の認証済ユーザーを表すHttpPrincipal
を返します。- 戻り値:
HttpPrincipal
、またはオーセンティケータが設定されていない場合はnull
-