単純なファイル・サーバーは、次の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
-
ネストされたクラスのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明static HttpHandler
createFileHandler
(Path rootDirectory) 指定されたディレクトリ・パス(およびそのサブディレクトリ)のファイルを提供する「ファイル・ハンドラ」を作成します。static HttpServer
createFileServer
(InetSocketAddress addr, Path rootDirectory, SimpleFileServer.OutputLevel outputLevel) 特定のパスからファイルをサービスする「ファイル・サーバー」を作成します。static Filter
createOutputFilter
(OutputStream out, SimpleFileServer.OutputLevel outputLevel)
-
メソッドの詳細
-
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) - APIのノート:
- ログ・メッセージを出力しない場合は、フィルタを使用しないことをお薦めします。
- パラメータ:
out
- 印刷先のストリームoutputLevel
- 出力レベル- 戻り値:
- 後処理フィルタ
- 例外:
IllegalArgumentException
-OutputLevel.NONE
が指定されている場合NullPointerException
- いずれかの引数がnullの場合
-