Spec-Zone.ru › OpenJDK 25

Пакет com.sun.net.httpserver

package com.sun.net.httpserver
Предоставляет простой высокоуровневый API HTTP-сервера, который можно использовать для создания встраиваемых HTTP-серверов. Поддерживаются протоколы «http» и «https». API предоставляет частичную реализацию RFC 2616 (HTTP 1.1) и RFC 2818 (HTTP поверх TLS). Любые функции HTTP, не предоставляемые этим API, можно реализовать в коде приложения с помощью API.

Основные компоненты:

  • класс HttpExchange, описывающий пару запроса и ответа,
  • интерфейс HttpHandler для обработки входящих запросов, а также класс HttpHandlers, предоставляющий полезные реализации обработчиков,
  • класс HttpContext, сопоставляющий путь URI с HttpHandler,
  • класс HttpServer для прослушивания соединений и передачи запросов обработчикам,
  • класс Filter, позволяющий выполнять предварительную и последующую обработку запросов.

Класс SimpleFileServer предоставляет простой файловый HTTP-сервер (предназначенный только для тестирования, разработки и отладки). Реализация по умолчанию предоставляется с помощью инструмента jwebserver.

Программисты должны реализовать интерфейс HttpHandler. Этот интерфейс предоставляет обратный вызов, который вызывается для обработки входящих запросов от клиентов. Запрос HTTP и его ответ называются обменом данными. Обмены HTTP представлены классом HttpExchange. Класс HttpServer используется для прослушивания входящих TCP-соединений и передает запросы по этим соединениям обработчикам, зарегистрированным на сервере.

Ниже приведен пример минимального HTTP-сервера:

  class MyHandler implements HttpHandler {
      public void handle(HttpExchange t) throws IOException {
          InputStream is = t.getRequestBody();
          read(is); // .. read the request body
          String response = "This is the response";
          t.sendResponseHeaders(200, response.length());
          OutputStream os = t.getResponseBody();
          os.write(response.getBytes());
          os.close();
      }
  }
  ...

  HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
  server.createContext("/applications/myapp", new MyHandler());
  server.setExecutor(null); // creates a default executor
  server.start();
  

Приведенный выше пример создает простой HttpServer, который использует поток вызывающего приложения для вызова метода handle() при поступлении HTTP-запросов, направленных на порт 8000 и путь /applications/myapp/.

Класс HttpExchange инкапсулирует все необходимое приложению для обработки входящих запросов и формирования соответствующих ответов.

Регистрация обработчика в HttpServer создает объект HttpContext, а к возвращенному контексту можно добавить объекты Filter. Фильтры используются для автоматической предварительной и последующей обработки обменов данными перед их передачей обработчику обмена.

Для защиты конфиденциальной информации можно использовать HttpsServer для обработки запросов «https», защищенных протоколами SSL или TLS. Для HttpsServer необходимо предоставить объект HttpsConfigurator, содержащий инициализированный объект SSLContext. HttpsConfigurator можно использовать для настройки наборов шифров и других рабочих параметров SSL. Простой SSLContext можно создать следующим образом:

  char[] passphrase = "passphrase".toCharArray();
  KeyStore ks = KeyStore.getInstance("JKS");
  ks.load(new FileInputStream("testkeys"), passphrase);

  KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
  kmf.init(ks, passphrase);

  TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
  tmf.init(ks);

  SSLContext ssl = SSLContext.getInstance("TLS");
  ssl.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
  

В приведенном выше примере файл хранилища ключей с именем «testkeys», созданный с помощью утилиты keytool, используется как хранилище сертификатов клиента и сервера. В следующем коде показано, как SSLContext используется в HttpsConfigurator и как SSLContext и HttpsConfigurator связываются с HttpsServer.

   server.setHttpsConfigurator (new HttpsConfigurator(sslContext) {
       public void configure (HttpsParameters params) {

       // get the remote address if needed
       InetSocketAddress remote = params.getClientAddress();

       SSLContext c = getSSLContext();

       // get the default parameters
       SSLParameters sslparams = c.getDefaultSSLParameters();
       if (remote.equals (...) ) {
           // modify the default set for client x
       }

       params.setSSLParameters(sslparams);
       // statement above could throw IAE if any params invalid.
       // eg. if app has a UI and parameters supplied by a user.

       }
   });
  
Начиная с:
1.6
Пакет Описание
com.sun.net.httpserver.spi
Предоставляет подключаемый интерфейс поставщика услуг, позволяющий заменить реализацию HTTP-сервера другими реализациями.
Класс Описание
Authenticator
Authenticator представляет реализацию механизма аутентификации HTTP.
Authenticator.Failure
Указывает на сбой аутентификации.
Authenticator.Result
Базовый класс для типа возвращаемого значения метода Authenticator.authenticate(HttpExchange).
Authenticator.Retry
Указывает, что аутентификацию необходимо повторить.
Authenticator.Success
Указывает, что аутентификация прошла успешно, и субъект аутентифицированного пользователя principal можно получить, вызвав Authenticator.Success.getPrincipal().
BasicAuthenticator
BasicAuthenticator предоставляет реализацию базовой аутентификации HTTP.
Filter
Фильтр для предварительной и последующей обработки входящих запросов.
Filter.Chain
Цепочка фильтров, связанная с HttpServer.
Headers
Заголовки запроса и ответа HTTP представлены этим классом, реализующим интерфейс Map<String, List <String>>.
HttpContext
HttpContext представляет сопоставление корневого пути URI приложения с HttpHandler, который вызывается для обработки запросов, предназначенных для этого пути на связанном HttpServer или HttpsServer.
HttpExchange
Этот класс инкапсулирует полученный HTTP-запрос и формируемый ответ в рамках одного обмена данными.
HttpHandler
Обработчик, вызываемый для обработки обменов HTTP.
HttpHandlers
Реализации HttpHandler, реализующие различные полезные обработчики, например обработчик статического ответа или условный обработчик, дополняющий один обработчик другим.
HttpPrincipal
Представляет пользователя, прошедшего базовую или дайджест-аутентификацию HTTP.
HttpsConfigurator
Этот класс используется для настройки параметров https для каждого входящего https-соединения на HttpsServer.
HttpServer
Этот класс реализует простой HTTP-сервер.
HttpsExchange
Этот класс инкапсулирует полученный HTTPS-запрос и формируемый ответ в рамках одного обмена данными и определяет расширения HttpExchange, относящиеся к протоколу HTTPS.
HttpsParameters
Представляет набор параметров для каждого https-соединения, согласованного с клиентами.
HttpsServer
Этот класс является расширением HttpServer, обеспечивающим поддержку HTTPS.
Request
Представление неизменяемого состояния запроса в рамках обмена HTTP.
SimpleFileServer
Простой файловый HTTP-сервер и его компоненты (предназначенные только для тестирования, разработки и отладки).
SimpleFileServer.OutputLevel
Описывает уровень выводимых сервером сообщений журнала при обработке обменов данными.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее дочерних компаний в США и других странах.
Авторское право © 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/jdk.httpserver/com/sun/net/httpserver/package-summary.html

Spec-Zone.ru

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