- java.lang.Object
-
- com.sun.net.httpserver.HttpServer
-
- 直系の既知のサブクラス:
HttpsServer
public abstract class HttpServer extends Object
このクラスは、単純なHTTPサーバーを実装します。 HttpServerは、IPアドレスとポート番号にバインドされ、このアドレスのクライアントからの着信TCP接続を待機します。 サブクラスHttpsServer
は、HTTPS要求を処理するサーバーを実装します。要求を処理するためには、1つ以上の
HttpHandler
オブジェクトをサーバーと関連付ける必要があります。 これらの各HttpHandlerは、このサーバー上のアプリケーションまたはサービスの位置を表すルートURIパスに登録されます。 HttpServerへのハンドラのマッピングは、HttpContext
オブジェクトによってカプセル化されます。 HttpContextは、createContext(String,HttpHandler)
を呼び出すことで作成されます。 ハンドラが見つからない要求は、応答404で拒否されます。 スレッドの管理は、Executor
オブジェクトを指定することで、このオブジェクトの外部で実行できます。 何も指定しない場合は、デフォルトの実装が使用されます。HTTP要求の受信時に、要求URIのパスのプレフィックスにもっとも良く一致するパスを持つコンテキストを検索することで、適切なHttpContextとハンドラを特定します。 パスは文字どおりに照合されます。 つまり、文字列の比較では大文字と小文字が区別され、エンコードされた形式への変換やこれらの形式からの変換は行われません。 たとえば、HttpServerで次のHttpContextが構成されているとします。
Context コンテキスト・パス ctx1 "/" ctx2 "/apps/" ctx3 "/apps/foo/" 次の表に、いくつかの要求URIと、一致する可能性があるコンテキストがあればそれを示します。
要求URI 一致するコンテキスト "http://foo.com/apps/foo/bar" ctx3 "http://foo.com/apps/Foo/bar" 一致なし、大文字と小文字の誤り "http://foo.com/apps/app1" ctx2 "http://foo.com/foo" ctx1 ソケット・バックログについての注
アドレスとポート番号にバインドするときは、アプリケーションで整数のバックログ・パラメータも指定できます。 これは、システムが内部的にキューに入れる着信TCP接続の最大数を表します。 接続は、HttpServerで受け入れられるのを待機する間、キューに入れられます。 上限に達すると、それ以上の接続は基本となるTCP実装によって拒否されるか、場合によっては無視されます。 正しいバックログ値の設定は、TCP層でのリソースの効率的な使用(高すぎる値を設定しない)と、着信要求の適切なスループットの維持(低すぎる値を設定しない)との間の妥協点になります。
- 導入されたバージョン:
- 1.6
-
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protected
HttpServer()
-
メソッドのサマリー
修飾子と型 メソッド 説明 abstract void
bind(InetSocketAddress addr, int backlog)
現在バインドされていないHttpServerを、指定されたアドレスおよびポート番号にバインドします。static HttpServer
create()
最初にローカル・アドレス/ポートにバインドされていないHttpServerインスタンスを作成します。static HttpServer
create(InetSocketAddress addr, int backlog)
指定されたInetSocketAddress
(IPアドレスとポート番号)にバインドするHttpServer
インスタンスを作成します。最大バックログも指定できます。abstract HttpContext
createContext(String path)
最初にハンドラを指定せずにHttpContextを作成します。abstract HttpContext
createContext(String path, HttpHandler handler)
HttpContextを作成します。abstract InetSocketAddress
getAddress()
このサーバーが待機しているアドレスを返します。abstract Executor
getExecutor()
このサーバーのexecutorオブジェクトがsetExecutor(Executor)
で指定された場合は、それを返します。何も指定されていない場合は、null
を返します。abstract void
removeContext(HttpContext context)
指定されたコンテキストをサーバーから削除します。abstract void
removeContext(String path)
指定されたパスによって識別されるコンテキストをサーバーから削除します。abstract void
setExecutor(Executor executor)
このサーバーのExecutor
オブジェクトを設定します。abstract void
start()
新しいバックグラウンド・スレッドでこのサーバーを起動します。abstract void
stop(int delay)
待機中のソケットを閉じ、新しい交換を処理できないようにすることで、このサーバーを停止します。
-
-
-
メソッドの詳細
-
create
public static HttpServer create() throws IOException
最初にローカル・アドレス/ポートにバインドされていないHttpServerインスタンスを作成します。 HttpServerは、現在インストールされているHttpServerProvider
から取得します。このサーバーは、bind(InetSocketAddress,int)
を使用してバインドしてからでないと使用できません。- 例外:
IOException
-
create
public static HttpServer create(InetSocketAddress addr, int backlog) throws IOException
指定されたInetSocketAddress
(IPアドレスとポート番号)にバインドするHttpServer
インスタンスを作成します。最大バックログも指定できます。 これは、待機中のソケットでキューに入れることができる着信接続の最大数です。 キューに入れられたTCP接続がこの上限を超える場合は、TCP実装で拒否されることがあります。 HttpServerは、現在インストールされているHttpServerProvider
から取得します- パラメータ:
addr
- 待機するアドレス。null
の場合は、bind()を呼び出してアドレスを設定する必要があるbacklog
- ソケットのバックログ。 この値がゼロ以下の場合は、システム・デフォルト値が使用される。- 例外:
BindException
- サーバーが要求されたアドレスをバインドできない場合、またはサーバーがすでにバインドされている場合。IOException
-
bind
public abstract void bind(InetSocketAddress addr, int backlog) throws IOException
現在バインドされていないHttpServerを、指定されたアドレスおよびポート番号にバインドします。 最大バックログも指定できます。 これは、待機中のソケットでキューに入れることができる着信接続の最大数です。 キューに入れられたTCP接続がこの上限を超える場合は、TCP実装で拒否されることがあります。- パラメータ:
addr
- 待機するアドレスbacklog
- ソケットのバックログ。 この値がゼロ以下の場合は、システム・デフォルト値が使用される。- 例外:
BindException
- サーバーが要求されたアドレスをバインドできない場合、またはサーバーがすでにバインドされている場合。NullPointerException
- addrがnull
の場合IOException
-
start
public abstract void start()
新しいバックグラウンド・スレッドでこのサーバーを起動します。 バックグラウンド・スレッドは、呼出し側の優先順位、スレッド・グループ、およびコンテキスト・クラス・ローダーを継承します。
-
setExecutor
public abstract void setExecutor(Executor executor)
このサーバーのExecutor
オブジェクトを設定します。 executorは、start()
を呼び出す前に設定する必要があります。 すべてのHTTP要求は、executorに指定されたタスクで処理されます。 start()の前にこのメソッドを呼び出さない場合、またはnull
のexecutorで呼び出した場合は、デフォルトの実装が使用されます。デフォルトの実装では、start()
メソッドで作成されたスレッドが使用されます。- パラメータ:
executor
- 設定するexecutor。デフォルトの実装の場合はnull
- 例外:
IllegalStateException
- このサーバーがすでに起動している場合
-
getExecutor
public abstract Executor getExecutor()
このサーバーのexecutorオブジェクトがsetExecutor(Executor)
で指定された場合は、それを返します。何も指定されていない場合は、null
を返します。- 戻り値:
- このサーバーに設定されたexecutor。設定されていない場合は
null
。
-
stop
public abstract void stop(int delay)
待機中のソケットを閉じ、新しい交換を処理できないようにすることで、このサーバーを停止します。 次にこのメソッドは、現在のすべての交換ハンドラが完了するまで、あるいは遅延秒数がほぼ経過するまで(いずれか先に発生したほうが優先される)ブロックされます。 そのあと、開いているすべてのTCP接続が閉じられ、start()で作成されたバックグラウンド・スレッドが終了し、メソッドが復帰します。 停止後、HttpServerは再利用できません。- パラメータ:
delay
- 交換が終了するまでの最大待機時間(秒)。- 例外:
IllegalArgumentException
- 遅延が0未満の場合。
-
createContext
public abstract HttpContext createContext(String path, HttpHandler handler)
HttpContextを作成します。 HttpContextは、URIパスからこのHttpServer上の交換ハンドラへのマッピングを表します。 作成後、パスに対してサーバーが受信するすべての要求は、指定されたハンドラ・オブジェクトを呼び出すことで処理されます。 コンテキストはパスによって識別され、これをremoveContext(String)
メソッドとともに使用して、あとでサーバーから削除できます。パスはこのコンテキストのルートURIパスを指定します。 パスの最初の文字は「/」である必要があります。
このクラスの概要では、着信要求URIがHttpContextインスタンスにマップされる方法を記述しています。
- パラメータ:
path
- コンテキストを関連付けるルートURIパスhandler
- 着信要求を呼び出すハンドラ。- 例外:
IllegalArgumentException
- パスが無効な場合、またはこのパスのコンテキストがすでに存在する場合NullPointerException
- パスまたはハンドラのいずれかがnull
の場合
-
createContext
public abstract HttpContext createContext(String path)
最初にハンドラを指定せずにHttpContextを作成します。 ハンドラは、HttpContext.setHandler(HttpHandler)
を使用してあとで指定する必要があります。 HttpContextは、URIパスからこのHttpServer上の交換ハンドラへのマッピングを表します。 作成後、ハンドラが設定されると、パスに対してサーバーが受信するすべての要求が、ハンドラ・オブジェクトを呼び出すことで処理されます。 コンテキストはパスによって識別され、これをremoveContext(String)
メソッドとともに使用して、あとでサーバーから削除できます。パスはこのコンテキストのルートURIパスを指定します。 パスの最初の文字は「/」である必要があります。
このクラスの概要では、着信要求URIがHttpContextインスタンスにマップされる方法を記述しています。
- パラメータ:
path
- コンテキストを関連付けるルートURIパス- 例外:
IllegalArgumentException
- パスが無効な場合、またはこのパスのコンテキストがすでに存在する場合NullPointerException
- パスがnull
の場合
-
removeContext
public abstract void removeContext(String path) throws IllegalArgumentException
指定されたパスによって識別されるコンテキストをサーバーから削除します。 コンテキストを削除しても、現在処理されている交換には影響を与えませんが、新しい交換は受け入れられなくなります。- パラメータ:
path
- 削除されるハンドラのパス- 例外:
IllegalArgumentException
- このパスに対応するハンドラが存在しない場合。NullPointerException
- パスがnull
の場合
-
removeContext
public abstract void removeContext(HttpContext context)
指定されたコンテキストをサーバーから削除します。 コンテキストを削除しても、現在処理されている交換には影響を与えませんが、新しい交換は受け入れられなくなります。- パラメータ:
context
- 削除するコンテキスト- 例外:
NullPointerException
- contextがnull
の場合
-
getAddress
public abstract InetSocketAddress getAddress()
このサーバーが待機しているアドレスを返します。- 戻り値:
- サーバーが待機しているアドレス/ポート番号
-
-