专栏首页技术专栏使用apache的httpClient对异步网络请求进行封装

使用apache的httpClient对异步网络请求进行封装

1.对返回结果的处理进行规范

public interface INetResult<T> {
    void getNetData(T data) ;
}

2.封装异步请求回调方法

/**
 * Created by gaowenfeng on 2017/8/23.
 * 回调类结果封装
 * 实现FutureCallback接口
 */
@AllArgsConstructor
public class CallbackString implements FutureCallback<HttpResponse>{

    /**
     * 请求成功时对返回结果的处理,须有外部注入
     */
    private INetResult<String> netResult;

 
    /**
     * 成功返回时的回调方法
     * @param response
     */
    public void completed(HttpResponse response) {
        String content = "";
        try {
            content = EntityUtils.toString(response.getEntity(), Constants.ENCONDING);
        } catch (IOException e) {
            e.printStackTrace();
        }
        netResult.getNetData(content);
    }

    /**
     * 失败时候的回调方法
     * @param e
     */
    public void failed(Exception e) {
        e.printStackTrace();
    }

    /**
     * 取消时候的回调方法
     */
    public void cancelled() {
    }
}

3.执行Http请求的方法封装

public class HttpUtil {
    /**
     * 执行post请求
     * @param request
     * @param callBack
     */
    protected static void executePost(HttpPost request, CallbackString callBack){
        //执行请求的对象
        CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
        httpclient.start();
        httpclient.execute(request,callBack);
        try {
            httpclient.close();
        } catch (IOException ignore) {

        }

    }

    /**
     * 将json对象进行封装
     * @param param json对象
     * @return HttpPost可使用的StringEntity
     */
    protected static StringEntity parseEntity(String param){
        StringEntity entity = new StringEntity(param, Constants.ENCONDING);
        entity.setContentEncoding(Constants.ENCONDING);
        entity.setContentType(Constants.CONTENT_TYPE);
        return entity;
    }
}

4. 执行具体的Http请求的service类

public class HttpClient extends HttpUtil{   //继承HttpUtil使其具有发送http请求的功能

    /**
     * 执行创建工作空间的请求  这里是具体的业务逻辑方法
     * @param workSpace 请求的对象  要请求的url的参数
     * @param callBack 回调方法
     */
    public static void createWorkSpace(String port,WorkspaceConfig workSpace, CallbackString callBack){
       HttpPost request = new HttpPost(CheCommands.getWorkSpaceUrl(port));  //post请求,需传入请求的url
       String entity = JSON.toJSONString(workSpace);  //将实体转换成json对象
       request.setEntity(parseEntity(entity));
       executePost(request,callBack);
    }
}

5.测试

public static void mian(String[] args){
           HttpClient.createWorkSpace(port, workSpaceConfig, new CallbackString(data -> {
                System.out.println(data);
            }));
}

6.java执行远程linux命令

7.执行远程linux所需配置

zip下载链接 下载后执行以下命令

mvn install:install-file -DgroupId=com.ganymed.ssh2 "-DartifactId=ganymed-ssh2-build" "-Dversion=210" "-Dpackaging=jar"  "-Dfile=/Users/gaowenfeng/Downloads/ganymed-ssh2-build210/ganymed-ssh2-build210.jar"
最后的Dfile路径为刚刚下载的zip解压后,里面的ganymed-ssh2-build210.jar的真实路径

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自定义注解实现参数验证与业务代码解耦

    Meet相识
  • Scrapy基础(二): 使用详解

    scrapy的安装和基本介绍请看 http://www.jianshu.com/p/a71386fa317a

    Meet相识
  • 慕课网高并发实战(五)- 安全发布对象

    不正确的发布可变对象导致的两种错误: 1.发布线程意外的所有线程都可以看到被发布对象的过期的值 2.线程看到的被发布对象的引用是最新的,然而被发布对象的状态...

    Meet相识
  • 你想过吗,为什么说面向对象最符合人的思维?

    在学习Java的过程中,我觉得面向对象是我遇到的第二个难题(第一个就是配置环境变量,哈哈)。我相信也有很多同胞也在这里被绊脚了吧,今天的话也就是其实也只是作为笔...

    ZackSock
  • Java设计模式-装饰者模式

    装饰者模式:在不改变原类文件以及不使用继承的情况下,动态地将责任附加到对象上,从而实现动态拓展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对...

    蒋老湿
  • Android自动化页面测速在美团的实践

    随着移动互联网的快速发展,移动应用越来越注重用户体验。美团技术团队在开发过程中也非常注重提升移动应用的整体质量,其中很重要的一项内容就是页面的加载速度。如果发生...

    Android技术干货分享
  • Kali Linux Web渗透测试手册(第二版) - 4.8- 执行跨站点请求伪造攻击

    thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt

    用户1631416
  • Android自动化页面测速在美团的实践

    随着移动互联网的快速发展,移动应用越来越注重用户体验。美团技术团队在开发过程中也非常注重提升移动应用的整体质量,其中很重要的一项内容就是页面的加载速度。如果发生...

    美团技术团队
  • Spring IOC的理解

    Sping IoC is Inversion of Control. 控制反转.

    CoffeeLand
  • RabbitMQ基础教程之Spring&JavaConfig使用篇

    一灰灰blog

扫码关注云+社区

领取腾讯云代金券