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

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

Программисты должны реализовать интерфейс 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.

    }
});
Since:
1.6
Интерфейс Описание
HttpHandler

Обработчик, который вызывается для обработки HTTP-обменов.

Класс Описание
Authenticator

Authenticator представляет собой реализацию механизма аутентификации HTTP.

Authenticator.Failure

Указывает на ошибку аутентификации.

Authenticator.Result

Базовый класс для типа возвращаемого значения метода authenticate()

Authenticator.Retry

Указывает, что аутентификация должна быть повторена.

Authenticator.Success

Указывает, что аутентификация выполнена успешно, и принципал аутентифицированного пользователя может быть получен путём вызова getPrincipal().

BasicAuthenticator

BasicAuthenticator предоставляет реализацию HTTP-аутентификации Basic.

Filter

Фильтр, используемый для пред- и пост-обработки входящих запросов.

Filter.Chain

цепь фильтров, связанных с HttpServer.

Headers

HTTP-заголовки запроса и ответа представлены этим классом, который реализует интерфейс Map<String, List <String>>.

HttpContext

HttpContext представляет отображение между корневым URI-путем приложения и HttpHandler, который вызывается для обработки запросов, предназначенных для этого пути в ассоциированном HttpServer или HttpsServer.

HttpExchange

Этот класс инкапсулирует полученный HTTP-запрос и ответ, который должен быть сгенерирован в одном обмене.

HttpPrincipal

Представляет пользователя, аутентифицированного по HTTP Basic или Digest аутентификации.

HttpsConfigurator

Этот класс используется для настройки параметров https для каждого входящего https-соединения на HttpsServer.

HttpServer

Этот класс реализует простой HTTP-сервер.

HttpsExchange

Этот класс инкапсулирует полученный HTTPS-запрос и ответ, который должен быть сгенерирован в одном обмене, и определяет расширения для HttpExchange, которые специфичны для протокола HTTPS.

HttpsParameters

Представляет набор параметров для каждого https-соединения, согласованного с клиентами.

HttpsServer

Этот класс является расширением HttpServer, который предоставляет поддержку HTTPS.

© 1993, 2020, 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/11/docs/api/jdk.httpserver/com/sun/net/httpserver/package-summary.html

Spec-Zone .ru
спецификации, руководства, описания, API