クラスHttpExchange
java.lang.Object
com.sun.net.httpserver.HttpExchange
- すべての実装されたインタフェース:
Request, AutoCloseable
- 直系の既知のサブクラス:
HttpsExchange
public abstract class HttpExchange extends Object implements AutoCloseable, Request
このクラスは、一回の交換で、受信するHTTP要求と生成される応答をカプセル化します。 これは、クライアントからの要求の検査と、応答の作成と送信のための方法を提供します。
交換は、リクエスト
HttpExchangeの一般的なライフサイクルを次の順序で示します:
getRequestMethod()でコマンドを決定するgetRequestHeaders()を使用して、リクエスト・ヘッダー(必要に応じて)を調べます。getRequestBody()は、リクエスト本文を読み取るためのInputStreamを返します。 リクエスト本文の読取り後、ストリームは閉じておく必要があります。getResponseHeaders()で、Content-Lengthを除くすべての応答ヘッダーを設定するsendResponseHeaders(int,long)で応答ヘッダーを送信する。 次のステップの前に呼び出す必要がある。getResponseBody()でOutputStreamを取得して、応答本体を送信する。 応答本体が作成済みの場合は、ストリームを閉じて交換を終了する必要がある。
交換は、リクエスト
InputStreamとレスポンスOutputStreamの両方が閉じられると終了します。 OutputStreamをクローズすると、InputStream (まだ閉じていない場合)が暗黙的にクローズされます。 ただし、閉じる前にInputStreamのすべてのデータを使用することをお薦めします。 簡易メソッドclose()はこれらのタスクをすべて実行します。 要求本体のすべてを使用せずに交換を閉じてもエラーではありませんが、基本となるTCP接続を次の交換用に利用できなくなる場合があります。 交換の終了に失敗した場合の結果は定義されていませんが、通常はリソースの解放や再利用に失敗します。 - 導入されたバージョン:
- 1.6
-
フィールドのサマリー
フィールド修飾子と型フィールド説明static final longレスポンス本文の長さが指定されていないため、チャンク・エンコードされますstatic final longこのレスポンスでレスポンス本文が送信されていません -
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明abstract voidclose()以下を順番に実行してこの交換を終了: まだ閉じていない場合は、リクエストInputStreamを閉じます。abstract ObjectgetAttribute(String name) Filterモジュールは、バンド外通信メカニズムとしてHttpExchangeインスタンスとともに任意のオブジェクトを格納できます。abstract HttpContextこの交換のHttpContextを返します。abstract InetSocketAddress要求を受信したローカル・アドレスを返します。abstract HttpPrincipalこの交換を所有するHttpContextにオーセンティケータが設定されている場合、このメソッドは、このHttpExchangeの認証済ユーザーを表すHttpPrincipalを返します。abstract Stringprotocol/majorVersion.minorVersionの形式で要求からのプロトコル文字列を返します。abstract InetSocketAddressこの要求を呼び出すリモート・エンティティのアドレスを返します。abstract InputStream要求本体を読み込むことができるストリームを返します。abstract Headersこのリクエストに含められたHTTPヘッダーを含む不変のHeadersを返します。abstract Stringリクエスト・メソッドを返します。abstract URIリクエストURIを返します。abstract OutputStream応答本体の書込み先となるストリームを返します。abstract int応答コードがすでに設定されている場合は、それを返します。abstract HeadersHTTPレスポンス・ヘッダーを格納でき、このレスポンスの一部として転送される可変Headersを返します。abstract voidsendResponseHeaders(int rCode, long responseLength) 応答ヘッダーと数値の応答コードの現在のセットをこのメソッドの指定どおりに使用して、クライアントへの応答の送返しを開始します。abstract voidsetAttribute(String name, Object value) Filterモジュールは、バンド外通信メカニズムとしてHttpExchangeインスタンスとともに任意のオブジェクトを格納できます。abstract void「フィルタ」がこの交換InputStreamおよびOutputStreamの(またはその両方)を、指定されたフィルタリングされたストリームとともにラップするために使用します。これにより、getRequestBody()への後続の呼出しは指定されたInputStreamを返し、getResponseBody()への呼出しは指定されたOutputStreamを返します。クラスオブジェクトで宣言されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait修飾子と型メソッド説明protected Objectclone()このオブジェクトのコピーを作成して、返します。booleanこのオブジェクトと他のオブジェクトが等しいかどうかを示します。protected voidfinalize()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。最終決定は非推奨であり、将来のリリースで削除される可能性があります。final Class<?> getClass()このObjectの実行時クラスを返します。inthashCode()このオブジェクトに対するハッシュ・コード値を返します。final voidnotify()このオブジェクトのモニターで待機中のスレッドを1つ再開します。final voidこのオブジェクトのモニターで待機中のすべてのスレッドを再開します。toString()オブジェクトの文字列表現を返します。final voidwait()現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。final voidwait(long timeoutMillis) 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。final voidwait(long timeoutMillis, int nanos) 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
-
フィールド詳細
-
RSPBODY_EMPTY
public static final long RSPBODY_EMPTYこのレスポンスでレスポンス本文が送信されていません- 導入されたバージョン:
- 26
- 関連項目:
-
RSPBODY_CHUNKED
public static final long RSPBODY_CHUNKEDレスポンス本文の長さが指定されていないため、チャンク・エンコードされます- 導入されたバージョン:
- 26
- 関連項目:
-
-
コンストラクタの詳細
-
HttpExchange
protected HttpExchange()サブクラスが呼び出すためのコンストラクタ。
-
-
メソッドの詳細
-
getRequestHeaders
-
getResponseHeaders
-
getRequestURI
-
getRequestMethod
public abstract String getRequestMethod()リクエスト・メソッドを返します。- 定義:
- インタフェース
Request内のgetRequestMethod - 戻り値:
- リクエスト・メソッド文字列
-
getHttpContext
-
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より大きい場合は、送信する正確なバイト数を指定し、アプリケーションはその正確な量のデータを送信する必要があります。 レスポンス長パラメータの値がRSPBODY_CHUNKED(ゼロ)の場合、レスポンス本文はチャンク転送エンコーディングを使用し、任意の量のデータを送信できます。 アプリケーションは、OutputStreamを閉じてレスポンス本文を終了します。 レスポンスの長さの値がRSPBODY_EMPTYの場合、レスポンス本文は送信されません。Content-Length応答ヘッダーがまだ設定されていない場合は、応答の長さパラメータに応じて適切な値に設定されます。
このメソッドは、
getResponseBody()を呼び出す前に呼び出す必要があります。- APIのノート:
- レスポンス本文をバイト配列から送信し、配列の長さをresponseLengthパラメータとして使用する場合は、配列が空の場合の動作に注意してください。 この場合、responseLengthはゼロになります。これは、長さがゼロになる
RSPBODY_CHUNKEDの値ですが、チャンク化されたエンコードされたレスポンス本体になります。 これは正しくありませんが、空の配列をチェックし、かわりにresponseLengthをRSPBODY_EMPTYに設定することをお薦めします。 また、チャンク化されたエンコードされたレスポンス本文を送信する場合、長さに関係なく、出力ストリームはハンドラによって明示的に閉じられる必要があります。 - 実装上のノート:
- この実装によって、コール元は、交換終了後に
Connection: closeヘッダーを「レスポンス・ヘッダー」に提供して、sendResponseHeadersの呼出し前に接続を強制的にクローズするようにサーバーに指示できます。 - パラメータ:
rCode- 送信する応答コードresponseLength- 0より大きい場合、固定レスポンス本文長を指定し、getResponseCode()から取得したストリームに正確なバイト数を書き込む必要があります。RSPBODY_CHUNKEDと等しい場合、チャンク化されたエンコーディングが使用され、任意のバイト数が書き込まれる可能性があります。RSPBODY_EMPTYと等しい場合、レスポンス本文の長さは指定されず、レスポンス本文は書き込まれません。 -1以下の値は、RSPBODY_EMPTYと同じように扱われます。- スロー:
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として設定する、フィルタ処理された入力ストリーム。変更がない場合はnullo- このオブジェクトOutputstreamとして設定する、フィルタ処理された出力ストリーム。変更がない場合はnull
-
getPrincipal
public abstract HttpPrincipal getPrincipal()この交換を所有するHttpContextにオーセンティケータが設定されている場合、このメソッドは、このHttpExchangeの認証済ユーザーを表すHttpPrincipalを返します。- 戻り値:
HttpPrincipal、またはオーセンティケータが設定されていない場合はnull
-