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