当前位置: 首页 > 知识库问答 >
问题:

可关闭的HttpResponse之间有什么区别。close()和httpPost。释放连接()?

乐正穆冉
2023-03-14
CloseableHttpResponse response = null;
try {
    // do some thing ....
    HttpPost request = new HttpPost("some url");
    response = getHttpClient().execute(request);
    // do some other thing ....
} catch(Exception e) {
    // deal with exception
} finally {
    if(response != null) {
        try {
            response.close(); // (1)
        } catch(Exception e) {}
        request.releaseConnection(); // (2)
    }
}

我已经发出了一个类似于上面的http请求。

为了释放基础连接,调用(1)和(2)是否正确?这两种调用之间有什么区别?

共有1个答案

蒋斯伯
2023-03-14

简短答复:

request.releaseConnection()正在释放底层HTTP连接,以允许它被重用。response.close()正在关闭一个流(不是连接),这个流是我们从流传输的响应内容网络套接字。

长答覆:

在任何最新版本中要遵循的正确模式

请求。releaseConnection()释放底层的httpConnection,以便请求可以重用,但是Java文档说:

简化从HttpClient 3.1 API迁移的简便方法。。。

我们不释放连接,而是确保响应内容被完全使用,从而确保连接被释放并准备好重用。下面是一个简短的示例:

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();
    // do something useful with the response body
    String bodyAsString = EntityUtils.toString(exportResponse.getEntity());
    System.out.println(bodyAsString);
    // and ensure it is fully consumed (this is how stream is released.
    EntityUtils.consume(entity1);
} finally {
    response1.close();
}
 类似资料:
  • 低于输出: 而使用 有人能解释一下区别吗?

  • 问题内容: 我一直在阅读iBooks中的快速编程指南。有人可以向我解释函数和闭包之间的区别是什么。只是它没有名称并且可以在表达式中使用? 问题答案: 函数实际上只是命名为闭包。以下至少在概念上是等效的: 在使用声明方法的情况下,这变得有些复杂,例如,关于自动插入公共命名参数等,添加了一些有趣的糖,例如,变为`func myMethod(foo:Int, #bar:Int, 但是,即使方法只是闭包的

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 问题内容: 方法和注释之间有什么区别?他们是一样的吗? 例如,这是: 与: 问题答案: 它们都达到相同的结果。通常不会使用注解(),因为您不会用看起来都一样的样板分配来填充代码。 请注意,为了使用注释,您的测试类应在其方法中进行注释或包含对的调用。

  • 问题内容: 已关闭 。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗? 添加详细信息并通过编辑此帖子来澄清问题。 5年前关闭。 改善这个问题 和之间有什么区别? 据我了解,一个将JSON加载到字典中,另一个则加载到对象中。 问题答案: 接受一个对象并产生一个字符串: 将采用类似文件的对象,从该对象读取数据,然后使用该字符串创建一个对象: 需要注意的是与文件和对象,而之间的转换和相互转

  • 这个问题似乎与帮助中心定义的范围内的编程无关。 据我所知,两者都有相同的目的。除了来自Spring MVC和来自JAX-RS这一事实。对此有什么见解吗?