1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java http post/get 服务端和客户端实现json传输

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

时间:2018-07-23 09:25:02

相关推荐

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

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

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

1 PostHttpClient.java 客户端 2 import java.io.IOException; 3 import mons.httpclient.HttpClient; 4 import mons.httpclient.HttpException; 5 import mons.httpclient.HttpStatus; 6 import mons.httpclient.methods.ByteArrayRequestEntity; 7 import mons.httpclient.methods.EntityEnclosingMethod; 8 import mons.httpclient.methods.PostMethod; 9 import mons.httpclient.methods.RequestEntity;10 11 12 /**13 * ********************************************************14 * 采用httpclient插件的post方式发送流二进制流数据到HTTP服务端15 ********************************************************** 16 * ---@author [zt_zoro1272@ ]17 ********************************************************** 18 * ---@version 19 ********************************************************** 20 * ---@since -8-2821 */22 public class PostHttpClient {23 24 25/**26* ********************************************************27* ---功能描述: 发送post请求,客户端采用二进制流发送,服务端采用二进制流介绍28**********************************************************29* ---@param json 入参的json格式的报文30* ---@param urlhttp服务器的地址31* ---@return 返回响应信息 32********************************************************** 33* ---@author [zt_zoro1272@ ]34**********************************************************35* ---@since -8-2836**********************************************************37* ---@update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]38**********************************************************39*40*/41public 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);// 设置服务的url50 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}7677//POST方式发送HTTP请求78public 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.out85 .println("\nauthor<pantp>===========客户端日志----POST方式调用HTTP服务,HTTP服务端响应报文如下:=============\n");86 87 System.out.println(outPackage);88 89 System.out90 .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 .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@ ] 30 ********************************************************** 31 * ---@version 32 ********************************************************** 33 * ---@since -8-28 34 */ 35 public class PostHttpServer extends HttpServlet { 36 37private static final long serialVersionUID = 1L; 38 39/* 40* 代码逻辑分以下三部分: 41* 1.获得请求报文 42* 2.根据请求报文的信息去做业务逻辑,然后封装返回报文 43* 3.输出相应报文 44*/ 45protected 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} 6768// 获得请求的报文,并作简单的校验 69public 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]; 8788 // 把buffer数组的值复制到data数组 89 System.arraycopy(buffer, 0, data, 0, len); 9091 // 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String 92 String inJson = new String(data, encode); 93 94 return inJson; 95} 96 97// 不提供get的处理方式 98protected void doGet(HttpServletRequest request, HttpServletResponse response) 99 throws ServletException, IOException { 100String inJson = null;// 保存HTTP客户端请求报文101String outJson = null;// 保存HTTP服务端输出报文102 103// 获得输人报文然后打印出来104inJson = getInJson(request);105System.out106 .println("\nauthor<pantp>===========服务端日志----POST方式接收HTTP请求,HTTP服务端收到的请求报文如下:==========\n");107System.out.println(inJson);108System.out109 .println("\nauthor<pantp>=================================================================\n");110 111// 以下代码部分获得请求报文,然后去做校验,转换以及其他的调用其他的业务逻辑等,这里就不管它112// ........................................................................113 114// 下面部分是输出部分的处理115outJson = "{\"Response\": {\"code\": \"0\",\"message\": \"成功\",\"data\": \"12345\"}}";// 输出不部分也以JSON格式的字符串输出,这里我就写死116 117response.setContentType("application/json; charset=UTF-8");118response.getWriter().print(outJson);119}11122 }

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。