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

クラスSimpleFileServer

java.lang.Object
com.sun.net.httpserver.SimpleFileServer

public final class SimpleFileServer extends Object
単純なHTTPファイル・サーバーとそのコンポーネント(テスト、開発およびデバッグの目的のみ)。

単純なファイル・サーバーは、次の3つのコンポーネントで構成されます:

  • 指定されたアドレスにバインドされているHttpServer
  • 特定のディレクトリ・パスからファイルを処理するHttpHandler
  • サーバーが処理する交換に関連するログ・メッセージを出力するオプションのFilter
個々のサーバー・コンポーネントは、提供されている静的メソッドを介して再利用および拡張するために取得できます。

単純なファイル・サーバー

createFileServer静的ファクトリ・メソッドは、即時利用可能な単純なファイル・サーバーであるHttpServerを返します。 サーバーには、指定されたディレクトリ・パス(およびそのサブディレクトリ)のファイルをサービスする初期ハンドラが付属しています。 出力レベルによって、System.outに出力されるログ・メッセージ(ある場合)が決まります。

単純なファイル・サーバーの例:


    var addr = new InetSocketAddress(8080);
    var server = SimpleFileServer.createFileServer(addr, Path.of("/some/path"), OutputLevel.INFO);
    server.start();
 

ファイル・ハンドラ

createFileHandler静的ファクトリ・メソッドは、ファイルおよびディレクトリのリストを提供するHttpHandlerを返します。 このハンドラは、HEADおよびGETリクエスト・メソッドのみをサポートします。他のリクエスト・メソッドを処理するには、サーバーにハンドラを追加するか、HttpHandlers.handleOrElse(Predicate, HttpHandler, HttpHandler)を使用して単一のハンドラを構成することでファイル・ハンドラを補完します。

単一のハンドラを作成する例:


    var handler = HttpHandlers.handleOrElse(
        (req) -> req.getRequestMethod().equals("PUT"),
        (exchange) -> {
            // validate and handle PUT request
        },
        SimpleFileServer.createFileHandler(Path.of("/some/path")))
    );
 

出力フィルタ

createOutputFilter静的ファクトリ・メソッドは、サーバーによって処理される交換に関連するログ・メッセージを出力するpost-processing filterを返します。 出力形式は、outputLevelで指定されます。

出力フィルタの例:


    var filter = SimpleFileServer.createOutputFilter(System.out, OutputLevel.VERBOSE);
    var server = HttpServer.create(new InetSocketAddress(8080), 10, "/some/path/", new SomeHandler(), filter);
    server.start();
 

jwebserverツール

単純なHTTPファイル・サーバーの実装は、jwebserverツールを介して提供されます。

ツール・ガイド:
jwebserver
導入されたバージョン:
18
  • メソッドの詳細

    • createFileServer

      public static HttpServer createFileServer(InetSocketAddress addr, Path rootDirectory, SimpleFileServer.OutputLevel outputLevel)
      特定のパスからファイルをサービスする「ファイル・サーバー」を作成します。

      サーバーは、URI path「ファイル・ハンドラ」にマップする初期コンテキストで構成されます。 「ファイル・ハンドラ」は、createFileHandler(rootDirectory)の呼出しによるかのように作成され、createContext("/")の呼出しによって作成されたコンテキストに関連付けられます。 返されたサーバーは起動されていません。

      サーバーが処理する交換に関連するログ・メッセージを出力する出力レベルを指定できます。 ログ・メッセージがある場合は、System.outに出力されます。 OutputLevel.NONEを指定すると、ログ・メッセージは出力されません。

      パラメータ:
      addr - 待機するアドレス
      rootDirectory - 提供されるルート・ディレクトリは絶対パスである必要があります
      outputLevel - ログ・メッセージの出力レベル
      戻り値:
      an HttpServer
      例外:
      IllegalArgumentException - rootが存在しない場合、絶対値でないか、ディレクトリでないか、または読み取り不可
      UncheckedIOException - I/Oエラーが発生した場合
      NullPointerException - いずれかの引数がnullの場合
      SecurityException - セキュリティ・マネージャがインストールされ、rootDirectoryの再帰的なFilePermission "read"が拒否された場合
    • createFileHandler

      public static HttpHandler createFileHandler(Path rootDirectory)
      指定されたディレクトリ・パス(およびそのサブディレクトリ)のファイルを提供する「ファイル・ハンドラ」を作成します。

      ファイル・ハンドラは、指定されたrootDirectoryパスに対してリクエストURIを解決し、レスポンスを処理するために、関連付けられたファイル・システム上のパスpを決定します。 パスpがディレクトリの場合、レスポンスには、HTMLでフォーマットされたディレクトリのリストがレスポンス本文として格納されます。 パスpがファイルである場合、レスポンスには、システム全体のmimeTableでのgetContentTypeForの起動およびレスポンス本文としてのファイルの内容によって決定される、ベスト・クラスのコンテンツ・タイプに基づく"Content-Type"ヘッダーが含まれます。

      このハンドラは、HEADまたはGETメソッドを持つリクエストのみをサポートし、他のメソッドを持つリクエストに対して405レスポンス・コードで返信します。

      パラメータ:
      rootDirectory - 提供されるルート・ディレクトリは絶対パスである必要があります
      戻り値:
      ファイル・ハンドラ
      例外:
      IllegalArgumentException - rootDirectoryが存在しない場合、絶対値でないか、ディレクトリでないか、読取り不可の場合
      NullPointerException - 引数がnullの場合
      SecurityException - セキュリティ・マネージャがインストールされ、rootDirectoryの再帰的なFilePermission "read"が拒否された場合
    • createOutputFilter

      public static Filter createOutputFilter(OutputStream out, SimpleFileServer.OutputLevel outputLevel)
      「交換」に関するログ・メッセージを出力する「後処理フィルタ」を作成します。 ログ・メッセージは、指定されたOutputStreamUTF-8エンコーディングで出力されます。
      APIのノート:
      ログ・メッセージを出力しない場合は、フィルタを使用しないことをお薦めします。
      パラメータ:
      out - 印刷先のストリーム
      outputLevel - 出力レベル
      戻り値:
      後処理フィルタ
      例外:
      IllegalArgumentException - OutputLevel.NONEが指定されている場合
      NullPointerException - いずれかの引数がnullの場合