public abstract class HttpExchange extends Object
次に HttpExchange の一般的なライフサイクルを順番に示します。
getRequestMethod()
でコマンドを決定する
getRequestHeaders()
で必要に応じて要求ヘッダーを調べる
getRequestBody()
が要求本体を読み取るための InputStream
を返す。要求本体を読み取ったあと、ストリームが閉じる。
getResponseHeaders()
で、Content-Length を除くすべての応答ヘッダーを設定する
sendResponseHeaders(int,long)
で応答ヘッダーを送信する。次のステップの前に呼び出す必要がある。
getResponseBody()
で OutputStream
を取得して、応答本体を送信する。応答本体が作成済みの場合は、ストリームを閉じて交換を終了する必要がある。
close()
はこれらのタスクをすべて実行します。要求本体のすべてを使用せずに交換を閉じてもエラーではありませんが、基本となる TCP 接続を次の交換用に利用できなくなる場合があります。交換の終了に失敗した場合の結果は定義されていませんが、通常はリソースの解放や再利用に失敗します。修飾子 | コンストラクタと説明 |
---|---|
protected |
HttpExchange() |
修飾子と型 | メソッドと説明 |
---|---|
abstract void |
close()
次の順序どおりに実行することで、この交換を終了します。
|
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 を返します。 |
public abstract Headers getRequestHeaders()
マップ内のキーでは大文字と小文字が区別されません。
public abstract Headers getResponseHeaders()
マップ内のキーでは大文字と小文字が区別されません。
public abstract URI getRequestURI()
public abstract String getRequestMethod()
public abstract HttpContext getHttpContext()
public abstract void close()
public abstract InputStream getRequestBody()
public abstract OutputStream getResponseBody()
sendResponseHeaders(int,long)
を呼び出す必要があります。同一の交換用にこのメソッドを複数回呼び出した場合でも、同じストリームが返されます。それぞれの交換を正しく終了させるためには、応答本体を送信しない場合でも、出力ストリームを閉じる必要があります。
このストリームを閉じると、getRequestBody()
から返された InputStream が暗黙的に閉じられます (まだ閉じられていない場合)。
sendResponseHeaders() の呼び出しで応答本体の固定長が指定された場合、その呼び出しに指定された正確なバイト数をこのストリームに書き込む必要があります。書き込まれるバイトが多すぎると、write() により IOException がスローされます。書き込まれるバイトが少なすぎると、close() により IOException がスローされます。どちらの場合も、交換は中止され、基本となる TCP 接続は閉じられます。
public abstract void sendResponseHeaders(int rCode, long responseLength) throws IOException
zero
の場合は、チャンク転送エンコーディングが使用され、任意のデータ量を送信できます。アプリケーションは、OutputStream を閉じることで応答本体を終了します。応答の長さに値 -1
が含まれている場合、応答本体は送信されません。
Content-Length 応答ヘッダーがまだ設定されていない場合は、応答の長さパラメータに応じて適切な値に設定されます。
このメソッドは、getResponseBody()
を呼び出す前に呼び出す必要があります。
rCode
- 送信する応答コードresponseLength
- 0 より大きい場合は、応答本体の固定長を指定し、その正確なバイト数を getResponseBody() から取得されたストリームに書き込む必要がある。0 に等しい場合は、チャンクエンコーディングが使用され、任意のバイト数を書き込むことができる。-1 より小さいか等しい場合は、応答本体の長さは指定されず、応答本体は書き込まれない。IOException
getResponseBody()
public abstract InetSocketAddress getRemoteAddress()
public abstract int getResponseCode()
-1
。public abstract InetSocketAddress getLocalAddress()
public abstract String getProtocol()
public abstract Object getAttribute(String name)
各フィルタクラスは、それらによって使用可能になる属性を文書化します。
name
- 取得する属性の名前NullPointerException
- name が null
の場合public abstract void setAttribute(String name, Object value)
各フィルタクラスは、それらによって使用可能になる属性を文書化します。
name
- 属性値に関連付ける名前value
- 属性値として格納するオブジェクト。null
値が許可される。NullPointerException
- name が null
の場合public abstract void setStreams(InputStream i, OutputStream o)
getRequestBody()
の後続の呼び出しは指定された InputStream
を返し、getResponseBody()
の後続の呼び出しは指定された OutputStream
を返します。この呼び出しに提供されたストリームは、オリジナルのストリームをラップする必要があります。また FilterInputStream
および FilterOutputStream
のサブクラスであることがありますが、そうである必要はありません。i
- このオブジェクトの入力ストリームとして設定する、フィルタされる入力ストリーム。変更がない場合は null
。o
- このオブジェクトの出力ストリームとして設定する、フィルタされる出力ストリーム。変更がない場合は null
。public abstract HttpPrincipal getPrincipal()
HttpPrincipal
を返します。null
。
Copyright © 2005, 2013, Oracle and/or its affiliates. All rights reserved.