|
Java HTTP Server | ||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object com.sun.net.httpserver.HttpServer
public abstract class HttpServer
このクラスは、単純な 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 層でのリソースの効率的な使用 (高すぎる値を設定しない) と、着信要求の適切なスループットの維持 (低すぎる値を設定しない) との間の妥協点になります。
コンストラクタの概要 | |
---|---|
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) で指定された場合は、それを返します。 |
abstract void |
removeContext(HttpContext context)
指定されたコンテキストをサーバーから削除します。 |
abstract void |
removeContext(String path)
指定されたパスによって識別されるコンテキストをサーバーから削除します。 |
abstract void |
setExecutor(Executor executor)
このサーバーの Executor オブジェクトを設定します。 |
abstract void |
start()
新しいバックグラウンドスレッドでこのサーバーを起動します。 |
abstract void |
stop(int delay)
待機中のソケットを閉じ、新しい交換を処理できないようにすることで、このサーバーを停止します。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
---|
protected HttpServer()
メソッドの詳細 |
---|
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
- コンテキストが null
の場合public abstract InetSocketAddress getAddress()
|
Java HTTP Server | ||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |