Класс 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 |
Создаёт фильтр постобработки, выводящий сообщения журнала об обменах. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, планируется удаление: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Приостанавливает текущий поток до пробуждения, обычно в результате вызова notify или прерывания. |
final void |
wait |
Приостанавливает текущий поток до пробуждения, обычно в результате вызова notify или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Приостанавливает текущий поток до пробуждения, обычно в результате вызова notify или прерывания, либо до истечения заданного промежутка реального времени. |
Подробное описание методов
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.