Пакет 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-заголовки запроса и ответа представлены этим классом, который реализует интерфейс |
| HttpContext | HttpContext представляет отображение между корневым URI-путем приложения и |
| HttpExchange | Этот класс инкапсулирует полученный HTTP-запрос и ответ, который должен быть сгенерирован в одном обмене. |
| HttpPrincipal | Представляет пользователя, аутентифицированного по HTTP Basic или Digest аутентификации. |
| HttpsConfigurator | Этот класс используется для настройки параметров https для каждого входящего https-соединения на HttpsServer. |
| HttpServer | Этот класс реализует простой HTTP-сервер. |
| HttpsExchange | Этот класс инкапсулирует полученный HTTPS-запрос и ответ, который должен быть сгенерирован в одном обмене, и определяет расширения для HttpExchange, которые специфичны для протокола HTTPS. |
| HttpsParameters | Представляет набор параметров для каждого https-соединения, согласованного с клиентами. |
| HttpsServer | Этот класс является расширением |
© 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