Класс HttpHandlers
public final class HttpHandlers extends Object
HttpHandler, реализующие различные полезные обработчики, например обработчик статического ответа или условный обработчик, дополняющий один обработчик другим. Фабричный метод of(int, Headers, String) позволяет создавать обработчики с заранее заданным состоянием статического ответа. Например, jsonHandler, который всегда возвращает 200 с одним и тем же JSON:
HttpHandlers.of(200,
Headers.of("Content-Type", "application/json"),
Files.readString(Path.of("some.json")));
или notAllowedHandler, который всегда отвечает кодом 405 — Method Not Allowed и указывает набор разрешённых методов: HttpHandlers.of(405, Headers.of("Allow", "GET"), "");
Функциональность обработчика можно расширить или улучшить с помощью handleOrElse, позволяющего дополнить заданный обработчик. Например, дополнив jsonHandler обработчиком notAllowedHandler:
Predicate<Request> IS_GET = r -> r.getRequestMethod().equals("GET");
var handler = HttpHandlers.handleOrElse(IS_GET, jsonHandler, notAllowedHandler);
Приведённый выше handler handleOrElse реализует конструкцию, подобную if-else: если метод запроса — "GET", обработка обмена передаётся jsonHandler, в противном случае обработка обмена передаётся notAllowedHandler.- Начиная с:
- 18
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static HttpHandler |
handleOrElse |
Дополняет условный HttpHandler другим обработчиком. |
static HttpHandler |
of |
Возвращает HttpHandler, отправляющий ответ, состоящий из заданных statusCode, headers и body. |
Подробное описание методов
handleOrElse
public static HttpHandler handleOrElse(Predicate<Request> handlerTest, HttpHandler handler, HttpHandler fallbackHandler)
HttpHandler другим обработчиком. Этот метод создаёт обработчик handleOrElse — конструкцию, подобную if-else. Обмены, запросы которых соответствуют предикату handlerTest, обрабатываются handler. Все остальные обмены обрабатываются fallbackHandler.
Пример вложенного обработчика handleOrElse:
Predicate<Request> IS_GET = r -> r.getRequestMethod().equals("GET");
Predicate<Request> WANTS_DIGEST = r -> r.getRequestHeaders().containsKey("Want-Digest");
var h1 = new SomeHandler();
var h2 = HttpHandlers.handleOrElse(IS_GET, new SomeGetHandler(), h1);
var h3 = HttpHandlers.handleOrElse(WANTS_DIGEST.and(IS_GET), new SomeDigestHandler(), h2);
Обработчик handleOrElse h3 передаёт обработку обмена SomeDigestHandler, если в заголовке запроса присутствует "Want-Digest" и метод запроса — GET; в противном случае он передаёт обработку обмена обработчику h2. В свою очередь, обработчик handleOrElse h2 передаёт обработку обмена
SomeGetHandler, если метод запроса — GET; в противном случае он передаёт обработку обмена обработчику h1. Обработчик
h1 обрабатывает все обмены, которые ранее не были переданы ни SomeGetHandler, ни SomeDigestHandler.- Параметры:
-
handlerTest— предикат запроса -
handler— условный обработчик -
fallbackHandler— резервный обработчик - Возвращает:
- обработчик
- Вызывает исключение:
-
NullPointerException— если какой-либо аргумент равен null
of
public static HttpHandler of(int statusCode, Headers headers, String body)
HttpHandler, отправляющий ответ, состоящий из заданных statusCode, headers и body. Этот метод создаёт обработчик, который считывает и отбрасывает тело запроса, прежде чем задаёт состояние ответа и отправляет ответ.
headers — это фактические заголовки ответа. Байты тела ответа — это последовательность байтов UTF-8, закодированная в body. Заголовки ответа отправляются с заданным statusCode и длиной байтов тела (или -1, если тело пусто). Затем байты тела отправляются как тело ответа, если только тело не пусто; в этом случае тело ответа не отправляется.
- Параметры:
-
statusCode— код состояния ответа -
headers— заголовки -
body— строка тела ответа - Возвращает:
- обработчик
- Вызывает исключение:
-
IllegalArgumentException— если statusCode не является положительным целым числом из 3 цифр согласно разделу 6.1.1 RFC 2616 -
NullPointerException— если headers или body равны 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/HttpHandlers.html