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

时间:2017-04-17 15:32:40

标签: java servlets httpclient

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

我的HttpClient使用PoolingHttpClientConnectionManager。

我像这样创建客户端:

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

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

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

由于

2 个答案:

答案 0 :(得分:3)

但是,您并不需要显式关闭HttpClient(您可能已经这样做了但值得注意),您应确保在方法执行后释放连接。

编辑:HttpClient中的ClientConnectionManager将负责维护连接状态。

int

答案 1 :(得分:3)

我发现您确实需要关闭资源,如文档中所示:https://hc.apache.org/httpcomponents-client-ga/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();
}