java http post/get 服务端和客户端实现json传输

最近需要写http post接口所以学习下。

总的还是不难直接上源码!

 1 PostHttpClient.java 客户端
 2 import java.io.IOException;
 3 import org.apache.commons.httpclient.HttpClient;
 4 import org.apache.commons.httpclient.HttpException;
 5 import org.apache.commons.httpclient.HttpStatus;
 6 import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
 7 import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
 8 import org.apache.commons.httpclient.methods.PostMethod;
 9 import org.apache.commons.httpclient.methods.RequestEntity;
10 
11 
12 /**
13  * ********************************************************
14  *  采用httpclient插件的post方式发送流二进制流数据到HTTP服务端
15  **********************************************************    
16  * ---@author [zt_zoro1272@163.com    ]
17  **********************************************************   
18  * ---@version 
19  **********************************************************   
20  * ---@since 2014-8-28
21  */
22 public class PostHttpClient {
23 
24    
25     /**
26      * ********************************************************
27      * ---功能描述:         发送post请求,客户端采用二进制流发送,服务端采用二进制流介绍
28      **********************************************************                                                       
29      * ---@param json    入参的json格式的报文
30      * ---@param url     http服务器的地址
31      * ---@return       返回响应信息                                         
32      **********************************************************                                                    
33      * ---@author  [zt_zoro1272@163.com    ]
34      **********************************************************
35      * ---@since 2014-8-28
36      **********************************************************
37      * ---@update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
38      **********************************************************
39      *
40      */
41     public static String postHttpReq(String json,String url) {
42         HttpClient httpClient = new HttpClient();
43         
44         byte b[] = json.getBytes();//把字符串转换为二进制数据
45         RequestEntity requestEntity = new ByteArrayRequestEntity(b);
46 
47         EntityEnclosingMethod postMethod = new PostMethod();
48         postMethod.setRequestEntity(requestEntity);// 设置数据
49         postMethod.setPath(url);// 设置服务的url
50         postMethod.setRequestHeader("Content-Type", "text/html;charset=GBK");// 设置请求头编码
51 
52         // 设置连接超时
53         httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(
54                 5 * 1000);
55         // 设置读取超时
56         httpClient.getHttpConnectionManager().getParams().setSoTimeout(20 * 1000);
57 
58         String responseMsg = "";
59         int statusCode = 0;
60         try {
61             statusCode = httpClient.executeMethod(postMethod);// 发送请求
62             responseMsg = postMethod.getResponseBodyAsString();// 获取返回值
63         } catch (HttpException e) {
64             e.printStackTrace();
65         } catch (IOException e) {
66             e.printStackTrace();
67         } finally {
68             postMethod.releaseConnection();// 释放连接
69         }
70 
71         if (statusCode != HttpStatus.SC_OK) {
72             System.out.println("HTTP服务异常" + statusCode);
73         }
74         return responseMsg;
75     }
76     
77     //POST方式发送HTTP请求
78     public static void main(String[] args) {
79         String json = "{\"PubInfo\": {\"clinet\": \"10.70.128.132\",\"company\": \"月月鸟0820\"},\"Request\": {\"strBillId\": \"18221075148\",\"strCcsOpId\": \"1234\"}}";
80         String url = "http://localhost:8080/httl_online/postHttpServer";
81         String outPackage = null;
82         outPackage = postHttpReq(json, url);
83         System.out.println("客户端日志----POST方式调用HTTP,请求报文为:" + json);
84         System.out
85                 .println("\nauthor<pantp>===========客户端日志----POST方式调用HTTP服务,HTTP服务端响应报文如下:=============\n");
86 
87         System.out.println(outPackage);
88 
89         System.out
90                 .println("\nauthor<pantp>================================================================\n");
91     }
92 
93 }

 

  1 PostHttpServer.java 服务端
  2 import java.io.BufferedReader;
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.io.UnsupportedEncodingException;
  6 import java.net.URLDecoder;
  7 import java.security.Principal;
  8 import java.util.Arrays;
  9 import java.util.Collections;
 10 import java.util.Enumeration;
 11 import java.util.HashMap;
 12 import java.util.Locale;
 13 import java.util.Map;
 14 
 15 import javax.servlet.RequestDispatcher;
 16 import javax.servlet.ServletException;
 17 import javax.servlet.ServletInputStream;
 18 import javax.servlet.http.Cookie;
 19 import javax.servlet.http.HttpServlet;
 20 import javax.servlet.http.HttpServletRequest;
 21 import javax.servlet.http.HttpServletResponse;
 22 import javax.servlet.http.HttpSession;
 23 
 24 
 25 /**
 26  * ********************************************************
 27  * 模拟的一个Http服务,处理客户端的post请求
 28  **********************************************************    
 29  * ---@author [zt_zoro1272@163.com    ]
 30  **********************************************************   
 31  * ---@version 
 32  **********************************************************   
 33  * ---@since 2014-8-28
 34  */
 35 public class PostHttpServer extends HttpServlet {
 36 
 37     private static final long serialVersionUID = 1L;
 38 
 39     /*
 40      * 代码逻辑分以下三部分:
 41      * 1.获得请求报文
 42      * 2.根据请求报文的信息去做业务逻辑,然后封装返回报文
 43      * 3.输出相应报文
 44      */
 45     protected void doPost(HttpServletRequest request,
 46             HttpServletResponse response) throws ServletException, IOException {
 47         String inJson = null;// 保存HTTP客户端请求报文
 48         String outJson = null;// 保存HTTP服务端输出报文
 49 
 50         // 获得输人报文然后打印出来
 51         inJson = getInJson(request);
 52         System.out
 53                 .println("\nauthor<pantp>===========服务端日志----POST方式接收HTTP请求,HTTP服务端收到的请求报文如下:==========\n");
 54         System.out.println(inJson);
 55         System.out
 56                 .println("\nauthor<pantp>=================================================================\n");
 57 
 58         // 以下代码部分获得请求报文,然后去做校验,转换以及其他的调用其他的业务逻辑等,这里就不管它
 59         // ........................................................................
 60 
 61         // 下面部分是输出部分的处理
 62         outJson = "{\"Response\": {\"code\": \"0\",\"message\": \"成功\",\"data\": \"12345\"}}";// 输出不部分也以JSON格式的字符串输出,这里我就写死
 63 
 64         response.setContentType("application/json; charset=UTF-8");
 65         response.getWriter().print(outJson);
 66     }
 67     
 68     // 获得请求的报文,并作简单的校验
 69     public String getInJson(HttpServletRequest request) throws IOException {
 70 
 71         byte buffer[] = new byte[64 * 1024];
 72         InputStream in = request.getInputStream();// 获取输入流对象
 73 
 74         int len = in.read(buffer);
 75         // 必须对数组长度进行判断,否则在new byte[len]会报NegativeArraySizeException异常
 76         if (len < 0) {
 77             throw new IOException("请求报文为空");
 78         }
 79 
 80         String encode = request.getCharacterEncoding();// 获取请求头编码
 81         // 必须对编码进行校验,否则在new String(data, encode);会报空指针异常
 82         if (null == encode || encode.trim().length() < 0) {
 83             throw new IOException("请求报文未指明请求编码");
 84         }
 85 
 86         byte data[] = new byte[len];
 87         
 88         // 把buffer数组的值复制到data数组
 89         System.arraycopy(buffer, 0, data, 0, len);
 90         
 91         // 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String
 92         String inJson = new String(data, encode);
 93 
 94         return inJson;
 95     }
 96 
 97     // 不提供get的处理方式
 98     protected void doGet(HttpServletRequest request, HttpServletResponse response)
 99             throws ServletException, IOException {    
100          String inJson = null;// 保存HTTP客户端请求报文
101          String outJson = null;// 保存HTTP服务端输出报文
102 
103          // 获得输人报文然后打印出来
104          inJson = getInJson(request);
105          System.out
106                  .println("\nauthor<pantp>===========服务端日志----POST方式接收HTTP请求,HTTP服务端收到的请求报文如下:==========\n");
107          System.out.println(inJson);
108          System.out
109                  .println("\nauthor<pantp>=================================================================\n");
110 
111          // 以下代码部分获得请求报文,然后去做校验,转换以及其他的调用其他的业务逻辑等,这里就不管它
112          // ........................................................................
113 
114          // 下面部分是输出部分的处理
115          outJson = "{\"Response\": {\"code\": \"0\",\"message\": \"成功\",\"data\": \"12345\"}}";// 输出不部分也以JSON格式的字符串输出,这里我就写死
116 
117          response.setContentType("application/json; charset=UTF-8");
118          response.getWriter().print(outJson);
119     }
120     
121     
122 }


web.xml配置

 1 <!-- 模拟HTTP的调用,写的一个只处理POST请求的http服务 -->
 2     <servlet>
 3         <servlet-name>PostHttpServer</servlet-name>
 4         <servlet-class>com.sitechasia.xinnet.online.util.cloudhttp.PostHttpServer</servlet-class>
 5     </servlet>
 6 
 7     <servlet-mapping>
 8         <servlet-name>PostHttpServer</servlet-name>
 9         <url-pattern>/postHttpServer</url-pattern>
10     </servlet-mapping>
11     


这样一个简单的httl post客户端就完成了,启动tomcat直接执行客户端mian方法就OK

 

转载于:https://www.cnblogs.com/zt-zoro/articles/3941457.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值