モジュール 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 (ハンドラ)が検出されます。 パスは文字どおりに照合されます。 たとえば、次のHttpContextsが構成されたHttpServerがあるとします:

description
コンテキスト コンテキスト・パス
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
    サブクラスが呼び出すためのコンストラクタ。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    abstract void
    bind​(InetSocketAddress addr, int backlog)
    現在バインドされていないHttpServerを指定されたアドレスとポート番号にバインドします。
    static HttpServer
    ローカル・アドレス/ポートに最初にバインドされていないHttpServerインスタンスを作成します。
    static HttpServer
    create​(InetSocketAddress addr, int backlog)
    指定したInetSocketAddress (IPアドレスとポート番号)にバインドするHttpServerインスタンスを作成します。
    abstract HttpContext
    最初にハンドラを指定せずにHttpContextを作成します。
    abstract HttpContext
    createContext​(String path, HttpHandler handler)
    HttpContextを作成します。
    このサーバーがリスニングしているアドレスを返します
    abstract Executor
    このサーバーExecutorオブジェクトがsetExecutor(Executor)で指定されている場合はそれを返し、何も指定されていない場合はnullを返します。
    abstract void
    指定されたコンテキストをサーバーから削除します。
    abstract void
    指定されたパスによって識別されるコンテキストをサーバーから削除します。
    abstract void
    setExecutor​(Executor executor)
    このサーバーExecutorオブジェクトを設定します。
    abstract void
    新しいバックグラウンド・スレッドでこのサーバーを起動します。
    abstract void
    stop​(int delay)
    リスニング・ソケットを閉じ、新しい交換の処理を禁止することで、このサーバーを停止します。

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

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • 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 - サーバーが要求されたアドレスをバインドできない場合、またはサーバーがすでにバインドされている場合
    • 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