Класс 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
createFileHandler
public static HttpHandler createFileHandler(Path rootDirectory)
Обработчик файлов разрешает URI запроса относительно указанного пути rootDirectory, чтобы определить путь p в связанной файловой системе, по которому нужно сформировать ответ. Если путь p является каталогом, ответ содержит список каталога в формате HTML в теле ответа. Если путь p является файлом, ответ содержит заголовок «Content-Type», основанный на наиболее вероятном типе содержимого, определяемом вызовом getContentTypeFor для общесистемного объекта mimeTable, а также содержимое файла в теле ответа.
Обработчик поддерживает только запросы с методом HEAD или GET и отвечает кодом 405 на запросы с любым другим методом.
- Параметры:
-
rootDirectory— корневой каталог, который будет обслуживаться; должен быть абсолютным путём - Возвращает:
- обработчик файлов
- Исключения:
-
IllegalArgumentException— если rootDirectory не существует, путь не является абсолютным, каталог не является каталогом или недоступен для чтения -
NullPointerException— если аргумент равен null
createOutputFilter
public static Filter createOutputFilter(OutputStream out, SimpleFileServer.OutputLevel outputLevel)
OutputStream в кодировке UTF-8.- Примечание API:
- Чтобы не выводить сообщения журнала, рекомендуется не использовать фильтр.
- Параметры:
-
out— поток для вывода -
outputLevel— уровень вывода - Возвращает:
- постобрабатывающий фильтр
- Исключения:
-
IllegalArgumentException— если задано значениеOutputLevel.NONE -
NullPointerException— если любой аргумент равен null
© 1993, 2025, 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/25/docs/api/jdk.httpserver/com/sun/net/httpserver/SimpleFileServer.html