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

Jersey-client和Apache HTTP Client有何比较?

严正诚
2023-03-14

jersey-client和Apache的HttpClient之间的主要区别是什么?在哪些方面一个比另一个好?某处有好的对比图吗?哪一个在较大的文件(比如2048 MB)下性能更好?

非常感谢您的评论!

共有1个答案

子车俊哲
2023-03-14

这两件事大概不应该直接比较。Jersey是一个REST客户机,具有完整的JAX-RS实现、简洁流畅的API和powerfull过滤器堆栈。Apache Http Client是一个Http客户机,在管理超时、复杂的代理路由和连接轮询等低级细节方面非常完美。它们作用于协议栈的不同级别。当您使用Jersey时,总会涉及到某种HTTP客户端后端。如果没有显式的后端,Jersey将使用httpurlconnection作为默认后端。

带有HttpUrlConnection后端示例的Jersey:

Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
                                     .get(ClientResponse.class);

泽西与Apache Http客户端后端示例:

HttpClient apacheClient = HttpClientBuilder.create().build();
Client client = new Client(new ApacheHttpClient4Handler(apacheClient,
                                                        new BasicCookieStore(),
                                                        true));
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
                                     .get(ClientResponse.class);

谈到性能和特性,将Apache Http Client与Jersey进行比较没有什么意义。这里可能需要比较不同的Jersey后端,因为Jersey本身只是一个包装API。根据我自己的经验,我想强调一下HttpUrlConnection和Apache Http客户端之间的一些关键区别:

HttpurlConnection

  • 不需要外部依赖项。这在嵌入式或移动平台上可能非常有价值。
  • 到处都有非常好的文件
  • 的API设计得很差。基于HTTPurlConnection的实现很难维护和扩展。
  • 许多特性是通过JVM属性配置的,其中一些特性可能在运行时不可重新配置。
  • 在某些情况下无法处理超时。您最终可能会为不同的超时设置10个不同的JVM属性,但在某些情况下,连接仍然会永远挂起。
  • 因为Gingerbread是Android推荐的http客户端API。

Apache Http客户端

  • 对于3.x版本,它的性能与httpurlconnection有点相似。Version4.1包含了许多性能方面的提升,并且比它的对应版本的性能要好得多
  • 非常擅长管理连接和数据读取超时
  • 它的设计遵循开放/封闭原则,因此您可以使用自己的实现定制HTTP处理的几乎任何部分。示例:重定向策略、重试策略、自定义cookie存储、请求/响应拦截器等。
  • 通过可定制的路由生成器为复杂的多代理路径提供丰富的代理支持
  • 具有开箱即用的每路由连接池。如果使用SSL/TLS,特别是涉及硬件PKCS#11令牌,这可能会给性能带来很好的好处。HTTPurlConnection也有一个内部池,但是您没有工具来自定义池的内容或时间,也没有监视设备来检查池状态。
  • 提供详细的日志记录功能
 类似资料:
  • 问题内容: 首先,我不是要在这里发动战争。我非常了解Jersey,但是很少使用httpclient。 jersey-client和Apache的httpclient之间的主要区别是什么?在哪些方面比另一方面更好?哪里有比较好的图表?较大的文件(例如2048 MB)中,哪一个效果更好? 非常感谢您的评论! 问题答案: 这两件事可能不应该直接比较。Jersey是REST客户端,具有完整的JAX-RS实

  • 当试图通过docker-client将RESTful服务发布到我的私有docker注册表时,我得到了这个错误。令人困惑的是,输入流会自行改变,就像您在这里看到的那样。它是在泽西的某个背景下制造的,但我找不到原因。我想问题发生在新泽西逻辑的某个地方 它一定与属于WebResource(泽西岛)的queryParams(String params)有关

  • 问题内容: 我正在努力弄清Java中的一些概念: JSR:描述规格,但不包含实际的实现。例如,http://jsr311.java.net/是“ RESTful Web服务的Java™API”的“主页”。它用作JSR-311的所有实现的通用参考。 可以从http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api下载JSR-311的接口(?),但

  • 我想做的是用httpclient下载一个文件。目前我的代码如下。 我的下载URL如下所示:http://example.com/file/afz938f348dfa3 正如你可以看到没有扩展名的文件(至少在网址)然而,当我去一个正常的浏览器网址,它下载文件asdasdaasda.txt或asdasdasdsd.pdf(名称是不同的url和extenstion并不总是相同的,取决于我试图下载什么)。

  • 我有一个测试Web服务项目,我在其中使用REST(泽西)JSON Spring。问题是我不知道如何将它们组合在一起。例如,我有一个have类,它可以与数据库一起使用: 我还有一个JSON类,它获取并返回JSON中的对象: 现在我试着把它们结合起来。我想从DB中获取数据,并将其转换为JSON,然后在响应中返回: 当我用最后一个组合开始项目时,我得到了这个错误: 我的pom.xml: My web.x