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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM