JAVA 9 新特性 — HTTP2

/ dev

Java 9中正式加入了对HTTP2的支持,同时对http client包进行了模块化封装,不过并没有正式加入java api,暂时放入一个临时的模块中:

1
requires jdk.incubator.httpclient;

所以在调用的时候会有警告:WARNING: Using incubator modules: jdk.incubator.httpclient.
在下一个java 版本中会正式加入,并且移除旧模块。

新的api调用方式十分简单,首先需要一个HttpClient,实例化方式是通过builder来实例化:

1
HttpClient.Builder builder = HttpClient.newBuilder()

然后是HttpRequest的实例化:

1
HttpRequest.Builder request = HttpRequest.newBuilder(new URI("https://www.baidu.com"));

同样也是builder模式.请求发送:

1
client.send(request, HttpResponse.BodyHandler.asString(Charset.forName("utf-8"))

请求返回都是返回一个HttpResponse,里面包含了常用对相应的不同处理方式。下面简单介绍一下:

BodyHandler和BodyProcessor里都定义了对不同响应body的处理实现,对于一个基本的http client来说已经足够。来看下HttpClient.Builder的一些常用方法:

同时HttpClient和HttpRequest中都可以对http 版本进行设置,默认是HTTP2,且后者会覆盖前者的设置,如果HTTP2的响应并不是对应版本则会回退到HTTP1.1

可以看到新的http client api对常用http请求已经做了比较好的封装和修改,基本使用已经可以抛弃apache的http client工具了。

在Java 9中,还对websocket进行了支持,可以查看https://docs.oracle.com/javase/9/docs/api/jdk/incubator/http/WebSocket.html了解。

参考文档:https://docs.oracle.com/javase/9/docs/api/jdk/incubator/http/package-summary.html