java - 正确使用 Apache HttpClient 以及何时关闭它。

标签 java servlets httpclient

我在一个 servlet 中使用 HttpClient 来调用一个资源,我在一些操作后将其作为 servlet 响应返回。

我的 HttpClient 使用 PoolingHttpClientConnectionManager。

我这样创建客户端:

private CloseableHttpClient getConfiguredHttpClient(){
    return HttpClientBuilder
        .create()
        .setDefaultRequestConfig(config)
        .setConnectionReuseStrategy(NoConnectionReuseStrategy.INSTANCE)
        .setConnectionManagerShared(true)
        .setConnectionManager(connManager)
        .build();
}

我在 servlet 服务方法中的 Try With Resource 中使用此客户端,因此它会自动关闭。为了阻止连接管理器被关闭,我将 setConnectionManagerShared 设置为 true。

我见过其他不关闭 HttpClient 的代码示例。我不应该关闭这个资源吗?

谢谢

最佳答案

对于 httpcomponents 版本 4.5.x:

我发现您确实需要关闭资源,如文档所示:https://hc.apache.org/httpcomponents-client-4.5.x/quickstart.html

CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://targethost/homepage");
CloseableHttpResponse response1 = httpclient.execute(httpGet);

try {
    System.out.println(response1.getStatusLine());
    HttpEntity entity1 = response1.getEntity();
    EntityUtils.consume(entity1);
} finally {
    response1.close();
}

关于java - 正确使用 Apache HttpClient 以及何时关闭它。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43454514/

相关文章:

java - 在 Spring boot kafka 上添加分区需要一些时间才能生效

Java - 如何使用相对路径在目录中创建文件

java - 如何在 Java 中设置数组?

javascript - 如何检查数据是否完整加载以使用异步管道Angular 8

java - 在 Android 上使用 HTTP POST XML

Java使用一个接口(interface)在两个类中实现不同的方法

java - 在 tomcat servlet 中检测客户端断开连接?

java - Jsp/Servlet Hello World 与 JBoss

java - 本地主机 4848、8080 问题

java - HttpRequestRetryHandler 没有被调用