Класс HttpExchange
- Все реализуемые интерфейсы:
AutoCloseable
- Непосредственные известные подклассы:
HttpsExchange
public abstract class HttpExchange extends Object implements AutoCloseable
Типичный жизненный цикл HttpExchange показан в последовательности ниже:
-
getRequestMethod()для определения команды. -
getRequestHeaders()для проверки заголовков запроса (при необходимости). -
getRequestBody()возвращаетInputStreamдля чтения тела запроса. После чтения тела запроса поток должен быть закрыт. -
getResponseHeaders()для установки любых заголовков ответа, кроме content-length. -
sendResponseHeaders(int,long)для отправки заголовков ответа. Должен быть вызван перед следующим шагом. -
getResponseBody()для полученияOutputStreamдля отправки тела ответа. Когда тело ответа было записано, поток должен быть закрыт для завершения обмена.
Обмены завершаются, когда оба запроса
InputStream и ответы OutputStream закрыты. Закрытие OutputStream, неявно закрывает InputStream (если он не закрыт). Однако рекомендуется потреблять все данные из InputStream перед его закрытием. Удобный метод close() выполняет все эти задачи. Закрытие обмена без потребления всего тела запроса не является ошибкой, но может сделать подключение TCP непригодным для последующих обменов. Последствия неудачного завершения обмена не определены, но обычно приводят к тому, что ресурсы не освобождаются/не повторно используются.- С момента:
- 1.6
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void |
close() |
Завершает этот обмен, выполняя следующие действия последовательно: закрывает запрос InputStream, если он еще не закрыт. |
abstract Object |
getAttribute |
Filter модули могут хранить произвольные объекты с HttpExchange экземплярами в качестве механизма внеполосного обмена данными. |
abstract HttpContext |
getHttpContext() |
Получить HttpContext для этого обмена. |
abstract InetSocketAddress |
getLocalAddress() |
Возвращает локальный адрес, на котором был получен запрос. |
abstract HttpPrincipal |
getPrincipal() |
Если на HttpContext, владеющем этим обменом, установлен аутентификатор, то этот метод вернёт HttpPrincipal, представляющий аутентифицированного пользователя для этого HttpExchange. |
abstract String |
getProtocol() |
Возвращает строку протокола из запроса в формате протокол/majorVersion.minorVersion. |
abstract InetSocketAddress |
getRemoteAddress() |
Возвращает адрес удалённого объекта, вызывающего этот запрос. |
abstract InputStream |
getRequestBody() |
Возвращает поток, из которого можно прочитать тело запроса. |
abstract Headers |
getRequestHeaders() |
Возвращает неизменяемую Map, содержащую HTTP-заголовки, которые были включены в этот запрос. |
abstract String |
getRequestMethod() |
Получить метод запроса. |
abstract URI |
getRequestURI() |
Получить запрос URI. |
abstract OutputStream |
getResponseBody() |
Возвращает поток, в который необходимо записать тело ответа. |
abstract int |
getResponseCode() |
Возвращает код ответа, если он уже установлен. |
abstract Headers |
getResponseHeaders() |
Возвращает изменяемую Map, в которую можно сохранить HTTP-заголовки ответа, которые будут переданы в составе этого ответа. |
abstract void |
sendResponseHeaders |
Начинает отправку ответа клиенту с помощью текущего набора заголовков ответа и числового кода ответа, указанного в этом методе. |
abstract void |
setAttribute |
Filter модули могут хранить произвольные объекты с HttpExchange экземплярами в качестве механизма внеполосного обмена данными. |
abstract void |
setStreams |
Используется модулями Фильтры для обертывания (или обоих) потоков InputStream и OutputStream этого обмена с помощью заданных отфильтрованных потоков, чтобы последующие вызовы getRequestBody() возвращали заданные InputStream, а вызовы getResponseBody() возвращали заданные OutputStream. |
Подробное описание конструкторов
HttpExchange
protected HttpExchange()
Подробное описание методов
getRequestHeaders
public abstract Headers getRequestHeaders()
Map, содержащую HTTP-заголовки, включенные в этот запрос. Ключи в этом Map будут именами заголовков, а значениями — List строк, содержащих каждое значение, включенное (либо для заголовка, указанного несколько раз, либо для заголовка, принимающего список значений, разделённых запятыми, в одной строке). В обоих случаях значения для имени заголовка будут представлены в порядке их включения в запрос. Ключи в Map не чувствительны к регистру.
- Возвращает:
- только для чтения
Mapдля доступа к заголовкам запроса
getResponseHeaders
public abstract Headers getResponseHeaders()
Map, в которую можно сохранить HTTP-заголовки ответа, которые будут переданы в составе этого ответа. Ключи в Map будут именами заголовков, а значениями — List строк, содержащих каждое значение, которое должно быть включено несколько раз (в порядке их включения). Ключи в Map не чувствительны к регистру.
- Возвращает:
- записываемое
Mapдля установки заголовков ответа.
getRequestURI
public abstract URI getRequestURI()
- Возвращает:
- запрос
URI
getRequestMethod
public abstract String getRequestMethod()
- Возвращает:
- метод запроса
getHttpContext
public abstract HttpContext getHttpContext()
HttpContext для этого обмена.- Возвращает:
HttpContext
close
public abstract void close()
- Закрыть входной поток запроса
InputStream, если он ещё не закрыт. - Закрыть выходной поток ответа
OutputStream, если он ещё не закрыт.
- Определено в:
-
closeв интерфейсеAutoCloseable
getRequestBody
public abstract InputStream getRequestBody()
InputStream.close() прочитает и отбросит оставшиеся данные (до реализации конкретного количества байтов).- Возвращает:
- поток, из которого можно прочитать тело запроса
getResponseBody
public abstract OutputStream getResponseBody()
sendResponseHeaders(int,long)) должен быть вызван перед вызовом этого метода. Несколько вызовов этого метода (для одного и того же обмена) вернут один и тот же поток. Для правильного завершения каждого обмена выходной поток должен быть закрыт, даже если тело ответа не отправляется. Закрытие этого потока неявно закрывает InputStream, возвращаемый из getRequestBody() (если он ещё не закрыт).
Если при вызове sendResponseHeaders(int, long) был указан фиксированный размер тела ответа, то в этот поток необходимо записать ровно указанное количество байтов. Если записано слишком много байтов, то метод записи OutputStream выбросит IOException. Если записано слишком мало байтов, то метод закрытия потока OutputStream.close() выбросит IOException. В обоих случаях обмен прерывается, и подчинённое соединение TCP закрывается.
- Возвращает:
- поток, в который записывается тело ответа
sendResponseHeaders
public abstract void sendResponseHeaders(int rCode, long responseLength) throws IOException
OutputStream. Если параметр длины ответа равен -1, тело ответа не отправляется. Если заголовок длины содержимого ещё не задан, то он устанавливается в соответствующее значение в зависимости от параметра длины ответа.
Этот метод должен быть вызван перед вызовом getResponseBody().
- Примечание по реализации:
- Эта реализация позволяет вызывающему методу инструктировать сервер принудительно закрыть соединение после завершения обмена, добавив заголовок
Connection: closeв заголовки ответа заголовки ответа перед вызовомsendResponseHeaders. - Параметры:
-
rCode- код ответа для отправки -
responseLength- если > 0, указывает фиксированный размер тела ответа, и в поток, полученный изgetResponseCode(), необходимо записать ровно это количество байтов. Если == 0, используется кодирование с разбиением на блоки, и может быть записано произвольное количество байтов. Если <= -1, длина тела ответа не указана, и тело ответа не должно записываться. - Исключения:
-
IOException- если заголовки ответа уже отправлены или произошла ошибка ввода-вывода - См. также:
getRemoteAddress
public abstract InetSocketAddress getRemoteAddress()
- Возвращает:
- адрес
InetSocketAddressвызывающего объекта
getResponseCode
public abstract int getResponseCode()
- Возвращает:
- код ответа, если доступен.
-1если ещё недоступен.
getLocalAddress
public abstract InetSocketAddress getLocalAddress()
- Возвращает:
InetSocketAddressлокального интерфейса
getProtocol
public abstract String getProtocol()
HTTP/1.1".- Возвращает:
- строка протокола из запроса
getAttribute
public abstract Object getAttribute(String name)
Filter могут хранить произвольные объекты с экземплярами HttpExchange в качестве механизма межпроцессорной связи. Затем другие фильтры или обработчик обмена могут получить доступ к этим объектам. Каждый класс Filter будет документировать доступные атрибуты.
- Параметры:
-
name- имя атрибута для получения - Возвращает:
- объект атрибута или
nullесли он не существует - Исключения:
-
NullPointerException- если имя являетсяnull
setAttribute
public abstract void setAttribute(String name, Object value)
Filter могут хранить произвольные объекты с экземплярами HttpExchange в качестве механизма межпроцессорной связи. Затем другие фильтры или обработчик обмена могут получить доступ к этим объектам. Каждый класс Filter будет документировать доступные атрибуты.
- Параметры:
-
name- имя для ассоциации со значением атрибута -
value- объект для хранения как значения атрибута.nullзначение разрешено. - Исключения:
-
NullPointerException- если имя являетсяnull
setStreams
public abstract void setStreams(InputStream i, OutputStream o)
InputStream) и вывода (OutputStream) этого обмена, с предоставленными отфильтрованными потоками, так что последующие вызовы к getRequestBody() будут возвращать заданные InputStream, а вызовы к getResponseBody() будут возвращать заданные OutputStream. Потоки, предоставленные в этом вызове, должны обертывать исходные потоки и могут (но не обязаны) быть подклассами FilterInputStream и FilterOutputStream.- Parameters:
-
i- отфильтрованный поток ввода, который необходимо установить в качестве потока ввода этого объекта, илиnullесли изменений не требуется -
o- отфильтрованный поток вывода, который необходимо установить в качестве потока вывода этого объекта, илиnullесли изменений не требуется
getPrincipal
public abstract HttpPrincipal getPrincipal()
HttpContext, которому принадлежит этот обмен, установлен аутентификатор, то этот метод вернёт HttpPrincipal, представляющий аутентифицированного пользователя для этого HttpExchange.- Returns:
- представляющий аутентифицированного пользователя, или
nullесли аутентификатор не установлен
© 1993, 2021, 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/17/docs/api/jdk.httpserver/com/sun/net/httpserver/HttpExchange.html