モジュール jdk.httpserver
パッケージ com.sun.net.httpserver

クラスHttpServer

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オブジェクトを指定することで、このオブジェクトの外部で実行できます。 何も指定しない場合は、デフォルトの実装が使用されます。

HttpContextパスへの要求URIのマッピング

HTTP要求の受信時に、要求URIのパスのプレフィックスにもっとも良く一致するパスを持つコンテキストを検索することで、適切なHttpContextとハンドラを特定します。 パスは文字どおりに照合されます。 次に例を示します。 たとえば、HttpServerで次のHttpContextが構成されているとします。

description
Contextコンテキスト・パス
ctx1"/"
ctx2"/apps/"
ctx3"/apps/foo/"

次の表に、いくつかの要求URIと、一致する可能性があるコンテキストがあればそれを示します。

description
要求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)
    待機中のソケットを閉じ、新しい交換を処理できないようにすることで、このサーバーを停止します。

    クラス java.lang.Objectで宣言されたメソッド

    cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait
  • コンストラクタの詳細

  • メソッドの詳細

    • 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インスタンスにマップされる方法を記述しています。

      APIのノート:
      通常、このパスは'/'で終わる必要はありますが、そうである必要はありません。 パスが"/foo"などで'/'で終わる場合、これはリクエストを"/foobar"または"/foo/bar"のパスと照合します。
      パラメータ:
      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インスタンスにマップされる方法を記述しています。

      APIのノート:
      通常、このパスは'/'で終わる必要はありますが、そうである必要はありません。 パスが"/foo"などで'/'で終わる場合、これはリクエストを"/foobar"または"/foo/bar"のパスと照合します。
      パラメータ:
      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()
      このサーバーが待機しているアドレスを返します。
      戻り値:
      サーバーが待機しているアドレス/ポート番号