`
y806839048
  • 浏览: 1084716 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

http代替ajax获取数据

阅读更多
/**
*
*/
package com.certus.util.httpClient;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.UUID;

import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.log4j.Logger;

import com.certus.util.CommonUtil;

/**
* @description 通过HttpClient Post请求服务器数据的Request
* @author renjing
* @time 2015年2月10日上午10:15:37
*/
public class HttpClientPostRequest extends AbstractHttpClientRequest {

    private Logger logger = Logger.getLogger(HttpClientPostRequest.class);

    public HttpClientPostRequest(String url) {
        super(url);
    }

    /*@Override
    public HttpMethod getHttpMethod() {
    NameValuePair[] pairs = new NameValuePair[this.params.size()];
    NameValuePair pair = null;
    String contentType = "multipart/form-data";
    int i = 0;
    for (Entry<String, Object> entry : params.entrySet()) {
    pair = new NameValuePair(entry.getKey(), String.valueOf(entry
    .getValue()));
    pairs[i++] = pair;
    }
    PostMethod httpMethod = new PostMethod(this.url);
    httpMethod.setRequestBody(pairs);

    if (StringUtils.isNotEmpty(contentType))
    httpMethod.setRequestHeader("Content-Type", contentType);

    return httpMethod;
    }*/

    @Override
    public HttpMethod getHttpMethod() {
        /*      NameValuePair[] pairs = new NameValuePair[this.params.size()];
              NameValuePair pair = null;
              String contentType = "";
              int i = 0;
              for (Entry<String, Object> entry : params.entrySet()) {
                  pair = new NameValuePair(entry.getKey(), String.valueOf(entry.getValue()));
                  pairs[i++] = pair;
              }

              PostMethod httpMethod = new PostMethod(this.url);
              httpMethod.setRequestBody(pairs);

              if (StringUtils.isNotEmpty(contentType))
                  httpMethod.setRequestHeader("Content-Type", contentType);

              return httpMethod;*/
        return null;
    }

    public String processPost(InputStream input, String tempName, String userId, String token) throws HttpClientException {
        String result = httpSendPIC(url, tempName, file2byte(input), userId, token);
        return result;
    }

    /**
     *
     * @Title    函数名称: processPostEntity
     * @Description   功能描述: 创建实例 需要post一个 entity的json(String)格式
     * @param    参          数:
     * @return          返  回   值: String 
     * @throws
     */
    @SuppressWarnings({ "resource", "deprecation" })
    public String processPostEntity(String entityJson) {
        String token = CommonUtil.getAuthToken();
        StringBuffer result = new StringBuffer();
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost method = new HttpPost(url);
        if (method != null) {
            try {
                // 添加参数
                method.setEntity(new StringEntity(entityJson, HTTP.UTF_8));
                method.setHeader("X-Auth-Token", token);
                method.setHeader("Content-Type", "application/Json");
                // 设置编码
                HttpResponse response = httpClient.execute(method);
                InputStream in = response.getEntity().getContent();
                BufferedReader breader = new BufferedReader(new InputStreamReader(in, "utf-8"));
                String st = breader.readLine();
                result.append(st);
                while (st != null) {
                    st = breader.readLine();
                }
                int statusCode = response.getStatusLine().getStatusCode();
                logger.info("statusCode:" + statusCode);
            } catch (IOException e) {
                // 发生网络异常
                logger.error("exception occurred!\n" + ExceptionUtils.getFullStackTrace(e));
            } finally {
                method.abort();
            }
        }
        return result.toString();
    }

    /**
     *
     * @Title           函数名称:   processPostEntity
     * @Description     功能描述:   创建实例 需要post一个 entity的json(String)格式
     * @param           参          数:  
     * @return          返  回   值:   String 
     * @throws
     */
    @SuppressWarnings({ "resource", "deprecation" })
    public String processPostEntity(String entityJson, boolean isPostInfo) {
        String token = CommonUtil.getAuthToken();
        StringBuffer result = new StringBuffer();
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost method = new HttpPost(url);
        if (method != null) {
            try {
                // 添加参数
                method.setEntity(new StringEntity(entityJson, HTTP.UTF_8));
                method.setHeader("X-Auth-Token", token);
                // 记录日志需要的参数
                if (isPostInfo) {
                    method.setHeader("Event-Id", UUID.randomUUID().toString());
                    method.setHeader("User-Id", CommonUtil.getUserId());
                }
                method.setHeader("Content-Type", "application/Json");
                // 设置编码
                HttpResponse response = httpClient.execute(method);
                InputStream in = response.getEntity().getContent();
                BufferedReader breader = new BufferedReader(new InputStreamReader(in, "utf-8"));
                String st = breader.readLine();
                result.append(st);
                while (st != null) {
                    st = breader.readLine();
                }
                int statusCode = response.getStatusLine().getStatusCode();
                logger.info("statusCode:" + statusCode);
            } catch (IOException e) {
                // 发生网络异常
                logger.error("exception occurred!\n" + ExceptionUtils.getFullStackTrace(e));
            } finally {
                method.abort();
            }
        }
        return result.toString();
    }

    @SuppressWarnings({ "resource", "deprecation" })
    public String processPostParam() {
        String token = CommonUtil.getAuthToken();
        StringBuffer result = new StringBuffer();
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost method = new HttpPost(url);
        if (method != null) {
            try {
                method.setHeader("X-Auth-Token", token);
                method.setHeader("Content-Type", "text/plain");
                // 设置编码
                HttpResponse response = httpClient.execute(method);
                InputStream in = response.getEntity().getContent();
                BufferedReader breader = new BufferedReader(new InputStreamReader(in, "utf-8"));
                String st = breader.readLine();
                result.append(st);
                while (st != null) {
                    st = breader.readLine();
                }
                int statusCode = response.getStatusLine().getStatusCode();
                logger.info("statusCode:" + statusCode);
            } catch (IOException e) {
                // 发生网络异常
                logger.error("exception occurred!\n" + ExceptionUtils.getFullStackTrace(e));
            } finally {
                method.abort();
            }
        }
        return result.toString();
    }

    public String httpSendPIC(String url, String tplName, byte[] PostData, String userId, String token) {

        StringBuffer result = new StringBuffer();
        URL u = null;
        HttpURLConnection con = null;
        // 尝试发送请求
        try {
            u = new URL(url + "?nsdName=" + URLEncoder.encode(tplName, "UTF-8"));
            u = new URL(url + "?nsdName=" + tplName);
            // u = new URL(url);
            con = (HttpURLConnection) u.openConnection();
            con.setRequestMethod("POST");
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setUseCaches(false);
            con.setRequestProperty("Content-Type", "multipart/form-data");
            con.setRequestProperty("X-Auth-Token", token);
            con.setRequestProperty("Event-Id", UUID.randomUUID().toString());
            con.setRequestProperty("User-Id", userId);

            con.setConnectTimeout(20000);
            con.setReadTimeout(300000);
            OutputStream outStream = con.getOutputStream();
            outStream.write(PostData);
            outStream.flush();
            outStream.close();
            System.out.println(con.getResponseCode());
            System.out.println(con.getResponseMessage());

            // 读取返回内容
            try {
                InputStream in = con.getInputStream();
                BufferedReader breader = new BufferedReader(new InputStreamReader(in, "utf-8"));
                String st = breader.readLine();
                result.append(st);
                while (st != null) {
                    st = breader.readLine();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.disconnect();
            }
        }
        System.out.println(result.toString());
        return result.toString();
    }

    public byte[] file2byte(InputStream input) {
        byte[] data = null;
        try {
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            int numBytesRead = 0;
            while ((numBytesRead = input.read(buf)) != -1) {
                output.write(buf, 0, numBytesRead);
            }
            data = output.toByteArray();
            output.close();
            input.close();
        } catch (FileNotFoundException ex1) {
            ex1.printStackTrace();
        } catch (IOException ex1) {
            ex1.printStackTrace();
        }
        return data;
    }
}
========================================================



package com.certus.util.httpClient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSONObject;
import com.certus.util.CommonUtil;

/**
* @description 抽象HttpClient 请求web服务器的request
* @author renjing
* @time 2015年2月10日上午10:15:37
*/
public abstract class AbstractHttpClientRequest implements HttpClientRequest {

    private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(AbstractHttpClientRequest.class);

    // 请求URL地址
    protected String url;
    // 请求参数
    protected Map<String, Object> params;

    /**
     * Constructor Method With All Params
     * @param url 请求URL
     */
    public AbstractHttpClientRequest(String url) {
        if (StringUtils.isEmpty(url))
            throw new NullPointerException("Cannot constract a HttpClientRequest with empty url.");

        this.url = url;
        this.params = new HashMap<String, Object>();
    }

    /**
     * 添加request参数
     * @param name 参数名
     * @param value 参数值
     */
    public void addParam(String name, Object value) {
        this.params.put(name, value);
    }

    /**
     * 执行请求
     * @throws HttpClientException httpClient请求异常
     */
    @Override
    public int process(HttpClientResponseHandler httpClientResponseHandler) throws HttpClientException {
        String auth_token = null;
        try {
            auth_token = CommonUtil.getAuthToken();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 获取子类的具体的HttpMethod实现
        HttpMethod httpMethod = this.getHttpMethod();
        // Head 里面塞值 -- modify by renjing
        // --- X-Auth-Token 值取什么?
        logger.info("client auth_token=" + auth_token);
        Header header = new Header("X-Auth-Token", auth_token);
        httpMethod.setRequestHeader(header);
        if (ObjectUtils.isNull(httpMethod))
            throw new NullPointerException("Cannot process request because the httpMethod is null.");

        HttpClient httpClient = new HttpClient();
        httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");

        try {
            long start = System.currentTimeMillis();
            logger.info("Begin to visit {}.", httpMethod.getURI());
            httpClient.executeMethod(httpMethod);
            logger.info("End to visit and take: {} ms.", (System.currentTimeMillis() - start));
        } catch (IOException e) {
            throw new HttpClientException(httpMethod.getPath(), e.getMessage());
        }

        // 利用HttpClientResponseHandler处理响应结果
        String retCode = null;
        String msg = null;
        if (ObjectUtils.isNotNull(httpClientResponseHandler))
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(httpMethod.getResponseBodyAsStream()));
                StringBuilder builder = new StringBuilder();
                String str = null;
                while ((str = reader.readLine()) != null) {
                    builder.append(str);
                }
                String response = builder.toString();
                // httpClientResponseHandler.handle(response);
                JSONObject jsonObj = JSONObject.parseObject(response);// .fromObject(response);
                retCode = jsonObj.getString("retCode");
                msg = jsonObj.getString("msg");
                httpClientResponseHandler.handle(response, retCode, msg);
            } catch (IOException e) {
                logger.error(e.getMessage(), e);
            }

        httpMethod.releaseConnection();
        /* if (retCode == null || !retCode.equals("ok")) {
             throw new RuntimeException(msg);
         } else {
             return 0;
         }*/
        return 0;
    }

    /**
     * 执行请求
     * @throws HttpClientException httpClient请求异常   需要记录日志
     */
    @Override
    public int processAndSaveLog(HttpClientResponseHandler httpClientResponseHandler) throws HttpClientException {
        String auth_token = null;
        try {
            auth_token = CommonUtil.getAuthToken();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 获取子类的具体的HttpMethod实现
        HttpMethod httpMethod = this.getHttpMethod();
        // Head 里面塞值 -- modify by renjing
        // --- X-Auth-Token 值取什么?
        logger.info("client auth_token=" + auth_token);
        // Header header = new Header("X-Auth-Token", auth_token);
        httpMethod.addRequestHeader("X-Auth-Token", auth_token);

        httpMethod.addRequestHeader("Event-Id", UUID.randomUUID().toString());
        httpMethod.addRequestHeader("User-Id", CommonUtil.getUserId());
        if (ObjectUtils.isNull(httpMethod))
            throw new NullPointerException("Cannot process request because the httpMethod is null.");

        HttpClient httpClient = new HttpClient();
        httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");

        try {
            long start = System.currentTimeMillis();
            logger.info("Begin to visit {}.", httpMethod.getURI());
            httpClient.executeMethod(httpMethod);
            logger.info("End to visit and take: {} ms.", (System.currentTimeMillis() - start));
        } catch (IOException e) {
            throw new HttpClientException(httpMethod.getPath(), e.getMessage());
        }

        // 利用HttpClientResponseHandler处理响应结果
        String retCode = null;
        String msg = null;
        if (ObjectUtils.isNotNull(httpClientResponseHandler))
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(httpMethod.getResponseBodyAsStream()));
                StringBuilder builder = new StringBuilder();
                String str = null;
                while ((str = reader.readLine()) != null) {
                    builder.append(str);
                }
                String response = builder.toString();
                // httpClientResponseHandler.handle(response);
                JSONObject jsonObj = JSONObject.parseObject(response);// .fromObject(response);
                retCode = jsonObj.getString("retCode");
                msg = jsonObj.getString("msg");
                httpClientResponseHandler.handle(response, retCode, msg);
            } catch (IOException e) {
                logger.error(e.getMessage(), e);
            }

        httpMethod.releaseConnection();
        /* if (retCode == null || !retCode.equals("ok")) {
             throw new RuntimeException(msg);
         } else {
             return 0;
         }*/
        return 0;
    }

    /**
     * 子类实现返回具体的HttpMethod对象
     * @return HttpMethod
     */
    public abstract HttpMethod getHttpMethod();
}
================================================================


/**
*
*/
package com.certus.util.httpClient;

/**
* @descriptionHttpClient 请求web服务器的request
* @author renjing
* @tiem 2015年2月10日上午10:15:37
*/
public interface HttpClientRequest {
    /**
    * 添加request参数
    * @param name 参数名
    * @param value 参数值
    */
    public void addParam(String name, Object value);

    /**
     * 执行request请求
     * @param httpClientResponseHandler 处理响应数据handler
     * @throws HttpClientException
     */
    public int process(HttpClientResponseHandler httpClientResponseHandler) throws HttpClientException;

    public int processAndSaveLog(HttpClientResponseHandler httpClientResponseHandler) throws HttpClientException;

}
=======================================
例子

String resultJson = JSONObject.toJSON(instance).toString();
        HttpClientPostRequest postRequest = new HttpClientPostRequest(ConfigFileLoad.getConfContent("NFVO_IP") + "/rest/nsrs/instantiate");

        String result = postRequest.processPostEntity(resultJson, true);
        JSONObject jsonObj = JSONObject.parseObject(result);
分享到:
评论

相关推荐

    H2003032068-胡州明-SMART系统-系统框架设计与开发

    AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),该技术并不是一种新的技术,实际上是多种...现在,可以用JavaScript调用AJAX引擎来代替产生一个HTTP的用户动作,内存中的数据编辑、页面导航

    jquery-1.1.3 效率提高800%

    // the options for this ajax request }global(true) 数据类型: Boolean 是否为当前的请求触发全局AJAX事件处理函数,默认值为true。设置为false可以防止触发像ajaxStart或ajaxStop这样的全局事件处理函数...

    asp.net知识库

    一个.net发送HTTP数据实体的类 按键跳转以及按Enter以不同参数提交,及其他感应事件 动态控制Page页的Head信息 SubmitOncePage:解决刷新页面造成的数据重复提交问题 SharpRewriter:javascript + xml技术利用#实现...

    亮剑.NET深入体验与实战精要2

    因pdf的容量过大分4个压缩包打包,还有一个源码另外下载。 《.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘...15.5.14 使用视图代替跨库操作 572 15.5.15 尽量避免大事务操作 572 15.5.16...

    亮剑.NET深入体验与实战精要3

    因pdf的容量过大分4个压缩包打包,还有一个源码另外下载。 《.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘...15.5.14 使用视图代替跨库操作 572 15.5.15 尽量避免大事务操作 572 15.5.16...

    ExtAspNet_v2.3.2_dll

    -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle=...

    jquery插件使用方法大全

     代码 $("selector").load(url,data,function(response,status,xhr)) 该方法是最简单的从服务器获取数据的方法。它几乎与 $.get(url, data, success) 等价,不同的是它不是全局函数,并且它拥有隐式的回调函数。当...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle=...

    Struts2入门教程(全新完整版)

    向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据。 16 org.apache.struts2.dispatcher.StreamResult 16 velocity 16 处理Velocity模板 16 org.apache.struts2.dispatcher.VelocityResult ...

    商用版本文本编辑器DotNetTextBoxV6.0.8Source 源码

    1)改用Session代替部分Cookie储存上传功能所用到的配置数据,以便让编辑器上传更加安全。 2)修正一个文件格式上传时存在的安全性问题。 3)上传页面去掉所有input隐藏属性储存参数,改用ViewState储存,并加入ViewState...

    DotNetTextBox V6.0.10 商业版 下载 (已知最新)

    1)去掉现在基本没法使用的插入EXCEL表格功能,改为无组件的导入EXCEL文档功能(测试中,导入excel文档必须符合数据库格式,否则导入数据将不全)。 2)更新编辑器的部分文字资源。 3)修正4号与5号字体大小一样的BUG! ...

    大名鼎鼎SWFUpload- Flash+JS 上传

    所有这些事件都可以在一个SWFUpload实体中被调用,这意味着在这些事件对应的函数中,你可以用 this 关键字来代替引用SWFUpload实体。  + fileDialogComplete (number of files selected)  - 触发条件  1. 用户...

    【05-面向对象(下)】

    •Lambda表达式主要作用就是代替匿名内部类的繁琐语法。它由三部分组成:  –形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。  –箭头(-&gt;),必须通过...

Global site tag (gtag.js) - Google Analytics