モジュール jdk.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