@Exported public abstract class HttpServer extends Object
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層でのリソースの効率的な使用(高すぎる値を設定しない)と、着信要求の適切なスループットの維持(低すぎる値を設定しない)との間の妥協点になります。
修飾子 | コンストラクタと説明 |
---|---|
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)
待機中のソケットを閉じ、新しい交換を処理できないようにすることで、このサーバーを停止します。
|
public static HttpServer create() throws IOException
HttpServerProvider
から取得します。このサーバーは、bind(InetSocketAddress,int)
を使用してバインドしてからでないと使用できません。IOException
public static HttpServer create(InetSocketAddress addr, int backlog) throws IOException
InetSocketAddress
(IPアドレスとポート番号)にバインドするHttpServer
インスタンスを作成します。最大バックログも指定できます。これは、待機中のソケットでキューに入れることができる着信接続の最大数です。キューに入れられたTCP接続がこの上限を超える場合は、TCP実装で拒否されることがあります。HttpServerは、現在インストールされているHttpServerProvider
から取得しますaddr
- 待機するアドレス。null
の場合は、bind()を呼び出してアドレスを設定する必要があるbacklog
- ソケットのバックログ。この値がゼロ以下の場合は、システム・デフォルト値が使用される。BindException
- サーバーが要求されたアドレスをバインドできない場合、またはサーバーがすでにバインドされている場合。IOException
public abstract void bind(InetSocketAddress addr, int backlog) throws IOException
addr
- 待機するアドレスbacklog
- ソケットのバックログ。この値がゼロ以下の場合は、システム・デフォルト値が使用される。BindException
- サーバーが要求されたアドレスをバインドできない場合、またはサーバーがすでにバインドされている場合。NullPointerException
- addrがnull
の場合IOException
public abstract void start()
public abstract void setExecutor(Executor executor)
Executor
オブジェクトを設定します。executorは、start()
を呼び出す前に設定する必要があります。すべてのHTTP要求は、executorに指定されたタスクで処理されます。start()の前にこのメソッドを呼び出さない場合、またはnull
のexecutorで呼び出した場合は、デフォルトの実装が使用されます。デフォルトの実装では、start()
メソッドで作成されたスレッドが使用されます。executor
- 設定するexecutor。デフォルトの実装の場合はnull
IllegalStateException
- このサーバーがすでに起動している場合public abstract Executor getExecutor()
setExecutor(Executor)
で指定された場合は、それを返します。何も指定されていない場合は、null
を返します。null
。public abstract void stop(int delay)
delay
- 交換が終了するまでの最大待機時間(秒)。IllegalArgumentException
- 遅延が0未満の場合。public abstract HttpContext createContext(String path, HttpHandler handler)
removeContext(String)
メソッドとともに使用して、あとでサーバーから削除できます。
パスはこのコンテキストのルートURIパスを指定します。パスの最初の文字は「/」である必要があります。
このクラスの概要では、着信要求URIがHttpContextインスタンスにマップされる方法を記述しています。
path
- コンテキストを関連付けるルートURIパスhandler
- 着信要求を呼び出すハンドラ。IllegalArgumentException
- パスが無効な場合、またはこのパスのコンテキストがすでに存在する場合NullPointerException
- パスまたはハンドラのいずれかがnull
の場合public abstract HttpContext createContext(String path)
HttpContext.setHandler(HttpHandler)
を使用してあとで指定する必要があります。HttpContextは、URIパスからこのHttpServer上の交換ハンドラへのマッピングを表します。作成後、ハンドラが設定されると、パスに対してサーバーが受信するすべての要求が、ハンドラ・オブジェクトを呼び出すことで処理されます。コンテキストはパスによって識別され、これをremoveContext(String)
メソッドとともに使用して、あとでサーバーから削除できます。
パスはこのコンテキストのルートURIパスを指定します。パスの最初の文字は「/」である必要があります。
このクラスの概要では、着信要求URIがHttpContextインスタンスにマップされる方法を記述しています。
path
- コンテキストを関連付けるルートURIパスIllegalArgumentException
- パスが無効な場合、またはこのパスのコンテキストがすでに存在する場合NullPointerException
- パスがnull
の場合public abstract void removeContext(String path) throws IllegalArgumentException
path
- 削除されるハンドラのパスIllegalArgumentException
- このパスに対応するハンドラが存在しない場合。NullPointerException
- パスがnull
の場合public abstract void removeContext(HttpContext context)
context
- 削除するコンテキストNullPointerException
- contextがnull
の場合public abstract InetSocketAddress getAddress()
Copyright © 2005, 2018, Oracle and/or its affiliates. All rights reserved.