Класс SimpleFileServer
public final class SimpleFileServer extends Object
Простой сервер файлов состоит из трёх компонентов:
-
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 enum |
SimpleFileServer.OutputLevel |
Описывает уровень вывода сообщений журнала, генерируемых сервером при обработке обменов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static HttpHandler |
createFileHandler |
Создаёт обработчик файлов, который обслуживает файлы из заданного пути к каталогу (и его подкаталогов). |
static HttpServer |
createFileServer |
Создаёт сервер файлов, который обслуживает файлы из заданного пути. |
static Filter |
createOutputFilter |
Создаёт фильтр пост-обработки, который выводит сообщения журнала об обменах. |
Подробное описание методов
createFileServer
public static HttpServer createFileServer(InetSocketAddress addr, Path rootDirectory, SimpleFileServer.OutputLevel outputLevel)
Сервер настраивается с начальным контекстом, который сопоставляет URI path с обработчиком файлов. Обработчик файлов создаётся так, как будто он вызывается createFileHandler(rootDirectory), и ассоциируется с контекстом, созданным так, как будто он вызывается createContext("/"). Возвращаемый сервер не запущен.
Уровень вывода можно указать для вывода сообщений журнала, относящихся к обработанным сервером обменам. Сообщения журнала, если таковые имеются, выводятся в System.out. Если задано OutputLevel.NONE, сообщения журнала не выводятся.
- Параметры:
-
addr- адрес, на котором нужно слушать -
rootDirectory- корневой каталог, который будет обслуживаться, должен быть абсолютным путём -
outputLevel- уровень вывода сообщений журнала - Возвращает:
- HttpServer
- Исключения:
-
IllegalArgumentException- если корень не существует, не является абсолютным, не является каталогом или не допускает чтения -
UncheckedIOException- если происходит ошибка ввода-вывода -
NullPointerException- если какой-либо аргумент равен null -
SecurityException- если установлен менеджер безопасности и рекурсивноеFilePermission"read" корневого каталога запрещено
createFileHandler
public static HttpHandler createFileHandler(Path rootDirectory)
Обработчик файлов разрешает URI запроса относительно заданного rootDirectory пути, чтобы определить путь p в файловой системе для обслуживания ответа. Если путь p является каталогом, то ответ содержит список каталогов, отформатированный в HTML, как тело ответа. Если путь p является файлом, то ответ содержит заголовок «Content-Type», основанный на лучшей догадке о типе содержимого, определённой путём вызова getContentTypeFor на общесистемной mimeTable, а также содержимое файла в качестве тела ответа.
Обработчик поддерживает только запросы с методом HEAD или GET и ответит кодом ответа 405 для запросов с любым другим методом.
- Параметры:
-
rootDirectory- корневой каталог, который будет обслуживаться, должен быть абсолютным путём - Возвращает:
- обработчик файлов
- Исключения:
-
IllegalArgumentException- если корневой каталог не существует, не является абсолютным, не является каталогом или не допускает чтения -
NullPointerException- если аргумент равен null -
SecurityException- если установлен менеджер безопасности и рекурсивноеFilePermission"read" корневого каталога запрещено
createOutputFilter
public static Filter createOutputFilter(OutputStream out, SimpleFileServer.OutputLevel outputLevel)
OutputStream в кодировке UTF-8. - Примечание API:
- Для того, чтобы не выводить сообщения журнала, рекомендуется не использовать фильтр.
- Параметры:
-
out- поток для вывода -
outputLevel- уровень вывода - Возвращает:
- фильтр пост-обработки
- Исключения:
-
IllegalArgumentException- еслиOutputLevel.NONEзадано -
NullPointerException- если любой аргумент равен null
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/jdk.httpserver/com/sun/net/httpserver/SimpleFileServer.html