正确使用Apache 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。 我不应该关闭这个资源吗?
谢谢
但是,您并不需要显式关闭HttpClient(您可能已经这样做但值得注意),您应确保在方法执行后释放连接。
编辑:HttpClient中的ClientConnectionManager将负责维护连接状态。
GetMethod httpget = new GetMethod("http://www.url.com/"); try { httpclient.executeMethod(httpget); Reader reader = new InputStreamReader(httpget.getResponseBodyAsStream(), httpget.getResponseCharSet()); // consume the response entity and do something awesome } finally { httpget.releaseConnection(); }
我发现你真的需要关闭资源,如文档中所示: 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(); }