モジュール jdk.httpserver

パッケージ com.sun.net.httpserver


パッケージcom.sun.net.httpserver
組込みのHTTPサーバーの構築に使用できる、単純で高度なHTTPサーバーAPIを提供します。 「HTTP」と「HTTPS」の両方がサポートされています。 APIは、RFC 2616 (HTTP 1.1)およびRFC 2818 (HTTP over TLS)の実装の一部を提供します。 このAPIで提供されないHTTP機能は、APIを使用してアプリケーション・コードで実装できます。

プログラマは、HttpHandlerインタフェースを実装する必要があります。 このインタフェースは、クライアントからの着信要求を処理するために呼び出されるコールバックを提供します。 HTTP要求とその応答を交換といいます。 HTTP交換は、HttpExchangeクラスによって表されます。 HttpServerクラスは、着信TCP接続の待機に使用され、これらの接続での要求をサーバーに登録されているハンドラにディスパッチします。

最小のHTTPサーバーの例を次に示します。

   class MyHandler implements HttpHandler {
       public void handle(HttpExchange t) throws IOException {
           InputStream is = t.getRequestBody();
           read(is); // .. read the request body
           String response = "This is the response";
           t.sendResponseHeaders(200, response.length());
           OutputStream os = t.getResponseBody();
           os.write(response.getBytes());
           os.close();
       }
   }
   ...

   HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
   server.createContext("/applications/myapp", new MyHandler());
   server.setExecutor(null); // creates a default executor
   server.start();
   

この例では、呼出し側アプリケーション・スレッドを使用して、ポート8000およびパス/applications/myapp/に転送された着信http要求に対してhandle()メソッドを呼び出す単純なHttpServerを作成します。

HttpExchangeクラスは、アプリケーションが着信要求を処理し、適切な応答を生成するために必要なものをすべてカプセル化します。

HttpServerにハンドラを登録するとHttpContextオブジェクトが作成され、返されたコンテキストにFilterオブジェクトを追加できます。 交換ハンドラに渡す前に、交換の事前処理と事後処理を自動的に実行するにはフィルタを使用します。

機密情報については、HttpsServerを使用すると、SSLまたはTLSプロトコルでセキュリティ保護されたhttps要求を処理できます。 HttpsServerはHttpsConfiguratorオブジェクトを持つ必要があります。このオブジェクトには初期化されたSSLContextが格納されます。 HttpsConfiguratorを使用すると、暗号化方式群やその他のSSL動作パラメータを構成できます。 次にSSLContextの簡単な例を示します。

   char[] passphrase = "passphrase".toCharArray();
   KeyStore ks = KeyStore.getInstance("JKS");
   ks.load(new FileInputStream("testkeys"), passphrase);

   KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
   kmf.init(ks, passphrase);

   TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
   tmf.init(ks);

   SSLContext ssl = SSLContext.getInstance("TLS");
   ssl.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
   

この例では、クライアントとサーバーの証明書の証明書ストアとして、keytoolユーティリティで作成された「testkeys」というキーストア・ファイルを使用しています。 次のコードは、その後HttpsConfiguratorでSSLContextがどのように使用されるか、またSSLContextとHttpsConfiguratorがどのようにHttpsServerにリンクされるかを示しています。

    server.setHttpsConfigurator (new HttpsConfigurator(sslContext) {
        public void configure (HttpsParameters params) {

        // get the remote address if needed
        InetSocketAddress remote = params.getClientAddress();

        SSLContext c = getSSLContext();

        // get the default parameters
        SSLParameters sslparams = c.getDefaultSSLParameters();
        if (remote.equals (...) ) {
            // modify the default set for client x
        }

        params.setSSLParameters(sslparams);
        // statement above could throw IAE if any params invalid.
        // eg. if app has a UI and parameters supplied by a user.

        }
    });
   

導入されたバージョン:
1.6
  • インタフェースのサマリー
    インタフェース
    説明
    HTTP交換を処理するために呼び出されるハンドラです。
  • クラスのサマリー
    クラス
    説明
    Authenticatorは、HTTP認証メカニズムの実装を表します。
    認証の失敗を示します。
    Authenticator.authenticate(HttpExchange)メソッドからの戻り型のベース・クラス。
    認証を再試行する必要があることを示します。
    認証が成功し、Authenticator.Success.getPrincipal()をコールして認証済ユーザーprincipalを取得できることを示します。
    BasicAuthenticatorは、HTTP基本認証の実装を提供します。
    着信要求の事前処理および事後処理に使用されるフィルタです。
    HttpServerに関連付けられたフィルタのチェーン。
    HTTP要求および応答ヘッダーは、インタフェースMap<String, List <String>>を実装するこのクラスによって表されます。
    HttpContextは、アプリケーションのルートURIパスと、関連付けられたHttpServerまたはHttpsServerでそのパス宛てのリクエストを処理するために起動されるHttpHandlerとの間のマッピングを表します。
    このクラスは、一回の交換で、受信するHTTP要求と生成される応答をカプセル化します。
    HTTP基本認証またはダイジェスト認証によって認証されたユーザーを表します。
    このクラスは、HttpsServer上の各着信https接続のhttpsパラメータを構成するために使用されます。
    このクラスは、単純なHTTPサーバーを実装します。
    このクラスは、受信したHTTPSリクエストと、ある交換で生成されるレスポンスをカプセル化し、HTTPSプロトコルに固有のHttpExchangeの拡張機能を定義します。
    クライアントとネゴシエーションを行う各HTTPS接続のパラメータのセットを表します。
    このクラスは、HTTPSに対するサポートを提供するHttpServerの拡張です。