---
title: 'HTTP Client und WebSocket API in Java 11'
url: 'https://tutego.de/blog/javainsel/2018/09/http-client-und-websocket-api-in-java-11'
markdown: 'https://tutego.de/blog/javainsel/2018/09/http-client-und-websocket-api-in-java-11.md'
date: '2018-09-06'
description: 'Der HTTP-Standard ist schon relativ alt, und die Ursprünge wurden Anfang der 1990er Jahre gelegt. Offiziell wurde die Version 1.0 im Jahr 1996 verabschiedet, also etwa zu gleichen Zeit, als Java 1.0 erschien. 2015 wurde HTTP/2 verabschiedet, und viele Verbesserungen kamen in den Standard. Die Java-…'
taxonomy:
  category:
    - Insel
---

# HTTP Client und WebSocket API in Java 11

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## HTTP Client und WebSocket API in Java 11

06.09.2018 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Der HTTP-Standard ist schon relativ alt, und die Ursprünge wurden Anfang der 1990er Jahre gelegt. Offiziell wurde die Version 1.0 im Jahr 1996 verabschiedet, also etwa zu gleichen Zeit, als Java 1.0 erschien. 2015 wurde HTTP/2 verabschiedet, und viele Verbesserungen kamen in den Standard. Die Java-Klassen rund um HTTP wurden allerdings nicht aktualisiert, sodass quelloffene Bibliotheken wie Apache HttpComponents (<http://hc.apache.org/>) oder die Asynchronous Http and WebSocket Client library for Java (<http://github.com/AsyncHttpClient/async-http-client>) die Lücken füllten.

### 1.1.1 Modul `java.net.http`

Statt die existierenden HTTP-Klassen wie HttpURLConnection um die Neuerungen von HTTP/2 zu erweitern, hat Oracle das Modul `java.net.http` eingeführt. Erstmalig wurde es in Java 9 im »Brutkasten« (engl. incubator) mit ausgeliefert und in Java 11 festgeschrieben. Neben synchronen Aufrufen können auch asynchrone Aufrufe getätigt werden, die ein modernes CompletableFuture lieferrn.

Das Modul besteht aus einem Paket `java.net.http` und den wesentlichen Typen:

- HttpClient
- HttpRequest, HttpResponse
- WebSocket

Schauen wir uns ein Beispiel an:

```java
try {

  URI uri = new URI( "https://tutego.de/" );

  HttpRequest request = HttpRequest.newBuilder().uri( uri ).GET().build();

  HttpResponse response =

    HttpClient.newHttpClient().send( request, BodyHandlers.ofString() );

  System.out.println( response.body() );

}

catch ( URISyntaxException | IOException | InterruptedException e ) {

  e.printStackTrace();

}
```

Die Methoden von HttpRequest sind allesamt abstrakt.

abstract class `java.net.http`.**HttpRequest**

- `Optional<HttpRequest.BodyPublisher> bodyPublisher()`
- `boolean expectContinue()`
- `HttpHeaders headers()`
- `String method()`
- `Builder newBuilder()`
- `Builder newBuilder(URI uri)`
- `Optional<Duration> timeout()`
- `URI uri()`
- `Version version()`

Führt der HttpClient die Anfrage aus, bekommen wir ein HttpResponse; die Schnittstelle deklariert folgende Methoden:

public interface `java.net.http`.**HttpResponse<T>**

- `T body()`
- `HttpHeaders headers()`
- `Optional<HttpResponse<T>> previousResponse()`
- `HttpRequest request()`
- `Optional<SSLSession> sslSession()`
- `int statusCode()`
- `URI uri()`
- `Version version()`

Was die Methode `body()` für einen Typ liefert, bestimmt die Parametrisierung von HttpResponse<T>, und die ergibt sich aus dem übergebenen BodyHandler<T> der HttpClient-Methode `send(…)`:

public abstract class `java.net.http`.**HttpClient**

- `static HttpClient newHttpClient()`
- `HttpResponse<T> send(HttpRequest req, HttpResponse.BodyHandler<T> responseBodyHandler)`

Der BodyHandler ist eine funktionale Schnittstelle mit einer Methode

- BodySubscriber<T> apply​(HttpResponse.ResponseInfo `responseInfo`)

Es gibt einige vordefinierte Implementierungen in der Klasse HttpResponse.BodyHandlers:

public static class `java.net.http`.**HttpResponse.BodyHandlers**

- `static HBodyHandler<byte[]> ofByteArray()`
- `staticBodyHandler`<Path> `ofFile`​(Path file)
- `static HttpRespoBodyHandler<Stream<String>> ofLines()`
- `static HBodyHandler<String> ofString()`

Weitere Methoden nennt die Javadoc.

Kategorien: [Insel](https://tutego.de/blog/javainsel/category/insel/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Next: [Einführung in reguläre Ausdrücke mit der Java-API](https://tutego.de/blog/javainsel/2018/09/einfuehrung-in-regulaere-ausdruecke-mit-der-java-api.md)
