Spec-Zone.ru › OpenJDK 27

Класс HttpHandlers

java.lang.Object
com.sun.net.httpserver.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(Predicate<Request> handlerTest, HttpHandler handler, HttpHandler fallbackHandler)
Дополняет условный HttpHandler другим обработчиком.
static HttpHandler of(int statusCode, Headers headers, String body)
Возвращает HttpHandler, отправляющий ответ, состоящий из заданных statusCode, headers и body.

Методы, объявленные в классе Object

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

Подробное описание методов

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 не является положительным целым числом из трёх цифр согласно разделу 6.1.1 RFC 2616
NullPointerException — если headers или body равны null

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания, ориентированные на разработчиков, с концептуальными обзорами, определениями терминов, обходными решениями и примерами работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её дочерних компаний в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API