パッケージcom.sun.net.httpserver
主なコンポーネントは次のとおりです:
- リクエストとレスポンスのペアを記述する
HttpExchange
クラス - 受信リクエストを処理する
HttpHandler
インタフェースと、有効なハンドラ実装を提供するHttpHandlers
クラス - URIパスを
HttpHandler
にマップするHttpContext
クラス HttpServer
クラスで、ハンドラへの接続およびディスパッチ・リクエストをリスニング- リクエストの前処理および後処理を許可する
Filter
クラス。
SimpleFileServer
クラスは、単純なHTTPのみのファイル・サーバー(テスト、開発およびデバッグの目的のみ)を提供します。 デフォルトの実装は、jwebserver
ツールを介して提供されます。
プログラマは、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
-
クラス説明Authenticatorは、HTTP認証メカニズムの実装を表します。認証の失敗を示します。
Authenticator.authenticate(HttpExchange)
メソッドからの戻り型のベース・クラス。認証を再試行する必要があることを示します。認証が成功し、Authenticator.Success.getPrincipal()
をコールして認証済ユーザーprincipalを取得できることを示します。BasicAuthenticatorは、HTTP基本認証の実装を提供します。着信要求の事前処理および事後処理に使用されるフィルタです。HttpServer
に関連付けられたフィルタのチェーン。HttpContext
は、アプリケーションのルートURI
パスと、関連付けられたHttpServer
またはHttpsServer
でそのパス宛てのリクエストを処理するために起動されるHttpHandler
との間のマッピングを表します。このクラスは、一回の交換で、受信するHTTP要求と生成される応答をカプセル化します。HTTP交換を処理するために呼び出されるハンドラです。静的レスポンス・ハンドラなどの様々な有用なハンドラ、または1つのハンドラを別のハンドラに補完する条件ハンドラを実装するHttpHandler
の実装。HTTP基本認証またはダイジェスト認証によって認証されたユーザーを表します。このクラスは、HttpsServer
上の各着信https接続のhttpsパラメータを構成するために使用されます。このクラスは、単純なHTTPサーバーを実装します。このクラスは、受信したHTTPSリクエストと、ある交換で生成されるレスポンスをカプセル化し、HTTPSプロトコルに固有のHttpExchange
の拡張機能を定義します。クライアントとネゴシエーションを行う各HTTPS接続のパラメータのセットを表します。このクラスは、HTTPSに対するサポートを提供するHttpServer
の拡張です。HTTP交換の不変リクエスト状態のビュー。単純なHTTPファイル・サーバーとそのコンポーネント(テスト、開発およびデバッグの目的のみ)。交換の処理時にサーバーによって生成されるログ・メッセージ出力レベルについて説明します。