我正在研究我们公司开发的一个应用程序。它使用Apache HttpClient库。在源代码中,它使用HttpClient
类来创建连接到服务器的实例。
我想了解ApacheHttpClient,我已经详细介绍了这组示例。所有示例都使用CloseableHttpClient
而不是HttpClient
。因此我认为CloseableHttpClient
是HttpClient
的扩展版本。如果是这种情况,我有两个问题:
其他答案似乎没有解决为什么off()
真的有必要?*二
它在旧的3中提到。x httpcomponents文档,它很长,与4有很大的不同。x HC。除此之外,解释非常简短,没有说明这个潜在资源是什么。
我对4.5.2版本的源代码做了一些研究,发现CloseableHttpClient的实现基本上只关闭了它的连接管理器。
(仅供参考)这就是为什么当您使用共享
池客户端连接管理器
并调用客户端close()
,异常java时。lang.IllegalStateException:将发生连接池关闭
。为了避免这种情况,setConnectionManagerShared
起作用。
我曾经在做请求时创建一个新的超文本传输协议客户端实例,最后关闭它。在这种情况下,最好不要调用
off()
。因为,如果连接管理器没有“共享”标志,它将被关闭,这对于单个请求来说太昂贵了。
事实上,我还发现在库cljhttp中,apachehc4.5上的Clojure包装器根本不调用
close()
。请参阅文件核心中的func请求
。clj
有同样的问题。其他的答案似乎并没有说明为什么关闭()真的是必要的?此外,Op似乎正在努力找出与HttpClient等合作的首选方式。
根据阿帕奇的说法:
// The underlying HTTP connection is still held by the response object
// to allow the response content to be streamed directly from the network socket.
// In order to ensure correct deallocation of system resources
// the user MUST call CloseableHttpResponse#close() from a finally clause.
此外,关系如下所示:
HttpClient
(接口)
执行人:
CloseableHttpClient
-ThreadSafe。
DefaultHttpClient
-线程安全但已弃用,请改用HttpClientBuilder
。
HttpClientBuilder
-不是线程安全的,而是创建线程安全的CloseableHttpClient
。
CloseableHttpClient
httpclient
-不是线程安全的,而是创建线程安全的CloseableHttpClient
。
CloseableHttpClient
.根据Apache的首选方式:
CloseableHttpClient httpclient = HttpClients.createDefault();
他们给出的示例不支持httpclient。close()在finally
子句中,还使用了ResponseHandler
。
作为替代方案,mkyong的做法也有点有趣:
HttpClient client = HttpClientBuilder.create().build();
他没有显示client.close()
调用,但我认为这是必要的,因为客户端
仍然是CloseableHttpClient
的实例。
>
CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpget = new HttpGet("http://localhost/"); CloseableHttpResponse response = httpclient.execute(httpget); try { //do something } finally { response.close(); }
>
HttpClient资源释放:当不再需要一个实例CloseableHttpClient并且即将超出范围时,必须通过调用CloseableHttpClient#off()方法关闭与之关联的连接管理器。
CloseableHttpClient httpclient = HttpClients.createDefault(); try { //do something } finally { httpclient.close(); }
请参阅参考资料以了解基础知识
@Scadge自Java7起,使用try-with-资源语句可确保每个资源在语句末尾关闭。它可以用于客户端和每个响应
try(CloseableHttpClient httpclient = HttpClients.createDefault()){
// e.g. do this many times
try (CloseableHttpResponse response = httpclient.execute(httpget)) {
//do something
}
//do something else with httpclient here
}
在Java 7之前,JVM内存中有一个名为PermGen的区域,JVM以前在这里保存它的类。在Java 8中,它被移除并被称为元空间的区域所取代。 PermGen和Metaspace之间最重要的区别是什么? 我知道的唯一区别是,并且忽略了VM参数。
和之间有什么区别? 是什么原因导致他们被扔?如何解决这些问题? 在修改现有代码以包含新的jar文件时,我经常会遇到这些可抛物。我在通过WebStart发布的一个Java应用程序的客户端和服务器端都碰到了它们。 我遇到的可能原因是: 代码客户端的中未包含的包 我们正在使用的新JAR缺少运行时类路径 版本与以前的JAR冲突 当我今天遇到这些问题时,我会采取跟踪和错误的方法来使事情正常工作。我需要更多的
当我试图在Spring4.x上进行测试时,我使用了MockMvc web客户端,但我正在阅读和尝试Spring5.x的新特性。 我认为,WebTestClient和MockMvc是相同或非常相似的。 MockMvc和WebTestClient之间的区别是什么?
有人能给我解释一下map和flatMap之间的区别,以及什么是各自的好用例吗? “结果扁平化”是什么意思?它有什么好处?
问题内容: 两者之间有什么区别(标记为评论): -如果它确定在建立连接之前的超时。 -如果确定两个连续数据包之间的不活动时间段或时间差, 那么下面的一个是做什么的: 问题答案: 最低级别的HTTP是TCP套接字。因此,当您请求URL并获得响应时,在较低级别上,将创建一个客户端套接字,该客户端套接字建立与远程服务器套接字的连接,发送一些数据并接收响应。 setConnectionTimeout :客
给定以下从静态编程语言Koans中提取的代码: 我自己的解决方案使用了。两者都适用于koan场景。 和的文档似乎非常相似。 这两个功能有什么区别?