単純なファイル・サーバーは、次の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 HttpHandlercreateFileHandler(Path rootDirectory) 指定されたディレクトリ・パス(およびそのサブディレクトリ)のファイルを提供する「ファイル・ハンドラ」を作成します。static HttpServercreateFileServer(InetSocketAddress addr, Path rootDirectory, SimpleFileServer.OutputLevel outputLevel) 特定のパスからファイルをサービスする「ファイル・サーバー」を作成します。static FiltercreateOutputFilter(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の場合
-