クラスHttpServer
- 直系の既知のサブクラス:
HttpsServer
HttpServerは、IPアドレスおよびポート番号にバインドされ、このアドレスのクライアントからの着信TCP接続をリスニングします。 サブクラスHttpsServerは、HTTPS要求を処理するサーバーを実装します。
要求を処理するためには、1つ以上のHttpHandlerオブジェクトをサーバーと関連付ける必要があります。 このような各HttpHandlerは、このサーバー上のアプリケーションまたはサービスのロケーションを表すルートURIパスに登録されます。 ハンドラからHttpServerへのマッピングは、HttpContextオブジェクトによってカプセル化されます。 HttpContextは、createContext(String,HttpHandler)を呼び出すことで作成されます。 ハンドラが見つからない要求は、応答404で拒否されます。 スレッドの管理は、Executorオブジェクトを指定することで、このオブジェクトの外部で実行できます。 何も指定しない場合は、デフォルトの実装が使用されます。
HTTPリクエストを受信すると、パスがリクエストURIパスの最長一致プレフィクスであるコンテキストを検索することで、適切なHttpContext (ハンドラ)が検出されます。 パスは文字どおりに照合されます。 たとえば、次のHttpContextsが構成されたHttpServerがあるとします:
| コンテキスト | コンテキスト・パス |
|---|---|
| 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
-
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明abstract voidbind(InetSocketAddress addr, int backlog) 現在バインドされていないHttpServerを指定されたアドレスとポート番号にバインドします。static HttpServercreate()ローカル・アドレス/ポートに最初にバインドされていないHttpServerインスタンスを作成します。static HttpServercreate(InetSocketAddress addr, int backlog) 指定したInetSocketAddress(IPアドレスとポート番号)にバインドするHttpServerインスタンスを作成します。static HttpServercreate(InetSocketAddress addr, int backlog, String path, HttpHandler handler, Filter... filters) 初期コンテキストでHttpServerインスタンスを作成します。abstract HttpContextcreateContext(String path) 最初にハンドラを指定せずにHttpContextを作成します。abstract HttpContextcreateContext(String path, HttpHandler handler) HttpContextを作成します。abstract InetSocketAddressこのサーバーがリスニングしているアドレスを返しますabstract ExecutorこのサーバーExecutorオブジェクトがsetExecutor(Executor)で指定されている場合はそれを返し、何も指定されていない場合はnullを返します。abstract voidremoveContext(HttpContext context) 指定されたコンテキストをサーバーから削除します。abstract voidremoveContext(String path) 指定されたパスによって識別されるコンテキストをサーバーから削除します。abstract voidsetExecutor(Executor executor) このサーバーExecutorオブジェクトを設定します。abstract voidstart()新しいバックグラウンド・スレッドでこのサーバーを起動します。abstract voidstop(int delay) リスニング・ソケットを閉じ、新しい交換の処理を禁止することで、このサーバーを停止します。
-
コンストラクタの詳細
-
HttpServer
protected HttpServer()サブクラスが呼び出すためのコンストラクタ。
-
-
メソッドの詳細
-
create
public static HttpServer create() throws IOExceptionローカル・アドレス/ポートに最初にバインドされていないHttpServerインスタンスを作成します。HttpServerは、現在インストールされているHttpServerProviderから取得されます。 サーバーは、使用する前にbind(InetSocketAddress,int)を使用してバインドする必要があります。- 戻り値:
HttpServerのインスタンス- スロー:
IOException- 入出力エラーが発生した場合
-
create
public static HttpServer create(InetSocketAddress addr, int backlog) throws IOException 指定したInetSocketAddress(IPアドレスとポート番号)にバインドするHttpServerインスタンスを作成します。 最大バックログも指定できます。 これは、待機中のソケットでキューに入れることができる着信接続の最大数です。 キューに入れられたTCP接続がこの上限を超える場合は、TCP実装で拒否されることがあります。HttpServerは、現在インストールされているHttpServerProviderから取得されます- パラメータ:
addr- リスニングするアドレス。nullの場合は、bind(InetSocketAddress, int)を呼び出してアドレスを設定する必要がありますbacklog- ソケットのバックログ。 この値がゼロ以下の場合は、システム・デフォルト値が使用される- 戻り値:
HttpServerのインスタンス- スロー:
IOException- 入出力エラーが発生した場合BindException- サーバーが要求されたアドレスをバインドできない場合、またはサーバーがすでにバインドされている場合
-
create
public static HttpServer create(InetSocketAddress addr, int backlog, String path, HttpHandler handler, Filter... filters) throws IOException 初期コンテキストでHttpServerインスタンスを作成します。サーバーは、URI
pathを交換handlerにマップする「初期コンテキスト」を使用して作成されます。 初期コンテキストは、createContext(path)の起動によって次のように作成されます。filters(存在する場合)は、指定された順序で初期コンテキストに追加されます。 返されたサーバーは起動されていないため、必要に応じてさらに構成できます。サーバー・インスタンスは、指定された
InetSocketAddressにバインドされます。最大バックログも指定できます。 これは、待機中のソケットでキューに入れることができる着信接続の最大数です。 キューに入れられたTCP接続がこの上限を超える場合は、TCP実装で拒否されることがあります。 HttpServerは、現在インストールされている
HttpServerProviderから取得します- パラメータ:
addr- リスニングするアドレス。nullの場合は、bindを呼び出してアドレスを設定する必要がありますbacklog- ソケットのバックログ。 この値がゼロ以下の場合は、システム・デフォルト値が使用されるpath- コンテキストのルートURIパスが絶対である必要がありますhandler- コンテキストのHttpHandlerfilters- コンテキストのフィルタ(オプション)- 戻り値:
- the HttpServer
- スロー:
BindException- サーバーがアドレスにバインドできない場合IOException- 入出力エラーが発生した場合IllegalArgumentException- パスが無効な場合NullPointerException- 次のいずれかの場合:path,handler,filters、またはfiltersのすべての要素は、nullです- 導入されたバージョン:
- 18
-
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オブジェクトを設定します。start()をコールする前に、Executorを確立する必要があります。 すべての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インスタンスにマップされる方法を記述しています。
- APIのノート:
- 通常、このパスは'/'で終わる必要はありますが、そうである必要はありません。 パスが
"/foo"などで'/'で終わる場合、これはリクエストを"/foobar"または"/foo/bar"のパスと照合します。 - パラメータ:
path- コンテキストを関連付けるルートURIパスhandler- 着信要求を呼び出すハンドラ- 戻り値:
HttpContextのインスタンス- スロー:
IllegalArgumentException- パスが無効な場合、またはこのパスのコンテキストがすでに存在する場合NullPointerException- パスまたはハンドラのいずれかがnullの場合
-
createContext
public abstract HttpContext createContext(String path) 最初にハンドラを指定せずにHttpContextを作成します。 ハンドラは、HttpContext.setHandler(HttpHandler)を使用してあとで指定する必要があります。HttpContextは、URIパスからこのHttpServer上の交換ハンドラへのマッピングを表します。 作成後、ハンドラが設定されると、パスに対してサーバーが受信するすべての要求が、ハンドラ・オブジェクトを呼び出すことで処理されます。 コンテキストはパスによって識別され、これをremoveContext(String)メソッドとともに使用して、あとでサーバーから削除できます。パスはこのコンテキストのルートURIパスを指定します。 パスの最初の文字は「/」である必要があります。
クラスの概要では、着信リクエストURIが
HttpContextインスタンスに対してどのように「マップ済」であるかについて説明します。- APIのノート:
- 通常、このパスは'/'で終わる必要はありますが、そうである必要はありません。 パスが
"/foo"などで'/'で終わる場合、これはリクエストを"/foobar"または"/foo/bar"のパスと照合します。 - パラメータ:
path- コンテキストを関連付けるルートURIパス- 戻り値:
HttpContextのインスタンス- スロー:
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()このサーバーがリスニングしているアドレスを返します- 戻り値:
- サーバーがリスニングしている
InetSocketAddress
-