- 直系の既知のサブクラス:
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 void
bind
(InetSocketAddress addr, int backlog) 現在バインドされていないHttpServer
を指定されたアドレスとポート番号にバインドします。static HttpServer
create()
ローカル・アドレス/ポートに最初にバインドされていないHttpServer
インスタンスを作成します。static HttpServer
create
(InetSocketAddress addr, int backlog) 指定したInetSocketAddress
(IPアドレスとポート番号)にバインドするHttpServer
インスタンスを作成します。static HttpServer
create
(InetSocketAddress addr, int backlog, String path, HttpHandler handler, Filter... filters) 初期コンテキストでHttpServer
インスタンスを作成します。abstract HttpContext
createContext
(String path) 最初にハンドラを指定せずにHttpContextを作成します。abstract HttpContext
createContext
(String path, HttpHandler handler) HttpContext
を作成します。abstract InetSocketAddress
このサーバーがリスニングしているアドレスを返しますabstract Executor
このサーバー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) リスニング・ソケットを閉じ、新しい交換の処理を禁止することで、このサーバーを停止します。
-
コンストラクタの詳細
-
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
-