您的位置:首页 > 理论基础 > 计算机网络

从零开始写Http框架---第三篇

2016-03-15 22:56 316 查看

本篇概述:

1 使用Nodejs写一个简易的API接口,支持Get、Post、Put、Patch、Delete五种方法,并部署在自己服务器,供大家调用
2 在Client端支持上述五种请求,并返回请求时带的参数


Activity代码主要如下:

1 Activity添加按钮,并给按钮添加监听事件


HttpUtil修改如下:

public class HttpUtil {
/**
* Get请求
*/
public static void get(String rootPath, RequestParams params, final LincolnCallBack<JSONObject> callBack) {
String rootUrl = GlobalUtil.ROOTURL.concat(rootPath);
rootUrl = UrlUtil.dealGetParams(rootUrl, params);
TaskController taskController = TaskController.registrInstance();
taskController.start(rootUrl, HttpMethod.GET, params, callBack);
}

/**
* Post请求
*/
public static void post(String rootPath, RequestParams params, final LincolnCallBack<JSONObject> callBack) {
String rootUrl = GlobalUtil.ROOTURL.concat(rootPath);
TaskController taskController = TaskController.registrInstance();
taskController.start(rootUrl, HttpMethod.POST, params, callBack);
}

/**
* Put请求
*/
public static void put(String rootPath, RequestParams params, final LincolnCallBack<JSONObject> callBack) {
String rootUrl = GlobalUtil.ROOTURL.concat(rootPath);
TaskController taskController = TaskController.registrInstance();
taskController.start(rootUrl, HttpMethod.PUT, params, callBack);
}

/**
* Patch请求
*/
public static void patch(String rootPath, RequestParams params, final LincolnCallBack<JSONObject> callBack) {
String rootUrl = GlobalUtil.ROOTURL.concat(rootPath);
TaskController taskController = TaskController.registrInstance();
taskController.start(rootUrl, HttpMethod.PATCH, params, callBack);
}

/**
* Delete请求
*/
public static void delete(String rootPath, RequestParams params, final LincolnCallBack<JSONObject> callBack) {
String rootUrl = GlobalUtil.ROOTURL.concat(rootPath);
TaskController taskController = TaskController.registrInstance();
taskController.start(rootUrl, HttpMethod.DELETE, params, callBack);
}
}


线程管理类:

public class TaskController {
private static TaskController taskController;
private static ExecutorService executor;
private static int MAX_THREAD_COUNT= 10;

public static TaskController registrInstance(){
if (taskController == null) {
synchronized (TaskController.class) {
if (taskController == null) {
taskController = new TaskController();
executor = Executors.newFixedThreadPool(MAX_THREAD_COUNT);
}
}
}
return taskController;
}

public <T> void  start(String rootUrl,HttpMethod method ,RequestParams params,LincolnCallBack<JSONObject> callback){
LogUtil.d("url:"+rootUrl);
HttpTask task = new HttpTask(rootUrl,method, params,callback);
executor.submit(task);
}

}


任务线程类:

public class HttpTask implements Runnable{
private String rootUrl;
private LincolnCallBack callBack;
private HttpMethod method;
private RequestParams params;

public HttpTask(String rootUrl,HttpMethod method,RequestParams params,LincolnCallBack callback){
this.rootUrl = rootUrl;
this.callBack = callback;
this.params = params;
this.method = method;
}

public void sendRequest(){
try {
URL url = new URL(rootUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod(method.toString());
if (method != HttpMethod.GET) {
urlConnection.setDoOutput(true);
byte[] bytes = params.toString`这里写代码片`().getBytes();
urlConnection.getOutputStream().write(bytes);
}

urlConnection.connect();

InputStream inputStream = urlConnection.getInputStream();
ByteArrayOutputStream byteOutSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length = -1;
while ((length = inputStream.read(buffer)) != -1) {
byteOutSteam.write(buffer, 0, length);
}
String resultString = byteOutSteam.toString();
JSONObject object = new JSONObject(resultString);
callBack.onSuccess(null, object);
} catch (Exception e) {
e.printStackTrace();
}

}

@Override
public void run() {
sendRequest();
}
}


查看源码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: