当前位置: 首页 > news >正文

jetty client 与apache http client的实现、分析

谈到httpclient的话,只要会想到apache的httpclient和jetty的httpclient,但是apache的httpclient3和4之间又有区别,通过学些,最终总结了三种方式使用HttpClient,

分别为使用httpclient3,httpclient4,jetty的httpclient,下面分别来贴代码:


第1种:使用的jar包为commons-httpclient-3.1,只需要一个jar包即可

这里使用的是GetMethod,与httpcleint4有区别

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public  static  void  main(String[] args) {
    HttpClient httpClient =  new  HttpClient();   //打开窗口
    GetMethod getMethod =  new  GetMethod( "http://www.baidu.com/" ); //输入网址
   try  {
      int  statusCode = httpClient.executeMethod(getMethod);   //按下回车运行,得到返回码
      System.out.println(statusCode);
      if  (statusCode != HttpStatus.SC_OK) {
          System.err.println( "Method failed: "  + getMethod.getStatusLine());
     
       }
      //读取内容 
      byte [] responseBody = getMethod.getResponseBody();   //得到返回的内容
      //处理内容
      System.out.println( new  String(responseBody));   
catch  (Exception e) {
    e.printStackTrace();
} finally {
    getMethod.releaseConnection();
   }
}


第二种,使用的jar包为httpclient4,需要的jar包由httpclient3分成了多个,自己去下载

   注意这里使用的是HttpGet,而httpclient3使用的是GetMethod

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  public  static  void  main(String[] args) {
      HttpClient httpClient =  new  DefaultHttpClient();
      HttpGet httpGet =  new  HttpGet( "http://www.baidu.com" );
      // 打印请求信息
      System.out.println(httpGet.getRequestLine());
      try  {
          // 发送请求,返回响应
          HttpResponse response =httpClient.execute(httpGet);
         // 打印响应信息
            System.out.println(response.getStatusLine());
            HttpEntity httpEntity = response.getEntity();
           System.out.println( httpEntity.getContentType());
           System.out.println(httpEntity.getContentLength());
           System.out.println(EntityUtils.getContentCharSet(httpEntity));
           InputStream in = httpEntity.getContent();   //可以得到请求的内容了
           .....                                     //这里可以自由发挥了
        
      catch  (Exception e) {
      }
  
    }

第三种:使用jetty的httpclient,jar在jetty包里面的lib包里面

    可以分为同步和异步两种

 异步:

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public  static  void  main(String[] args) {
   HttpClient client =  new  HttpClient();
   client.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL);   //还可以进行其他的配置
   try  {
    client.start();
     catch  (Exception e) {
     e.printStackTrace();
     }
     
ContentExchange exchange =  new  ContentExchange()    //exchange,里面放置回调方法
{
      protected  void  onResponseComplete()  throws  IOException
      {
        super .onResponseComplete();     
        String responseContent =  this .getResponseContent();
                System.out.println(responseContent);
        ........                                   //可以对返回结果自由发挥了
      }
};
exchange.setMethod( "GET" );
exchange.setURL( "http://www.baidu.com" );
try  {
client.send(exchange);                       //client发送消息
catch  (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

同步:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HttpClient httpClient =  new  HttpClient();
     ........................... //同样对client进行配置
try  {
     httpClient.start();
     ContentExchange contentExchange =  new  ContentExchange();
     httpClient.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL);
     contentExchange.setURL( "http://www.baidu.com" );
     contentExchange.setTimeout( 30000 );
     httpClient.send(contentExchange);     //client发送
     contentExchange.waitForDone();        //同步等待结果返回
     System.err.println( "Response status: " +contentExchange.getResponseStatus());
     System.out.println( "Response content:" +contentExchange.getResponseContent());
catch  (Exception e) {
     e.printStackTrace();
}

希望对初学者有所帮助!!!!!




     本文转自布拉君君 51CTO博客,原文链接:http://blog.51cto.com/5148737/1413767,如需转载请自行联系原作者






相关文章:

  • suse linux 10上MQ7.0安装测试手记
  • Mac下开机启动rc.common不生效的问题
  • ubuntu安装过程小记
  • GitHub 上开源的区块链项目 90% 死亡了
  • 防止僵尸进程的三种方法
  • cisco之VLAN的配置
  • bootstrap-内联文本元素-着重
  • 成功的虚拟化系统是如何炼成的?实施及运维
  • LNMP相关问题——PHP无法连接MySQL之一
  • 黑马程序员--集合框架【2】
  • Linux 运维常用组合命令
  • 调试路由器相关
  • 关于linux的段错误(Segmentation fault)
  • oracle 11g for redhat 64
  • 关于阵列卡的配置参数Cache Policy(缓存策略)
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • hadoop集群管理系统搭建规划说明
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript 基本功--面试宝典
  • PAT A1120
  • rc-form之最单纯情况
  • Sequelize 中文文档 v4 - Getting started - 入门
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 从零开始学习部署
  • 动态规划入门(以爬楼梯为例)
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 小程序开发之路(一)
  • 一份游戏开发学习路线
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​Spring Boot 分片上传文件
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (13):Silverlight 2 数据与通信之WebRequest
  • (14)Hive调优——合并小文件
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (离散数学)逻辑连接词
  • (万字长文)Spring的核心知识尽揽其中
  • (译) 函数式 JS #1:简介
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .Net 路由处理厉害了
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net(C#)中String.Format如何使用
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .net打印*三角形
  • .NET企业级应用架构设计系列之应用服务器
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • @GlobalLock注解作用与原理解析
  • @RequestBody的使用
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • []常用AT命令解释()
  • [1525]字符统计2 (哈希)SDUT