java http post/get 服务端和客户端实现json传输
注:本文来源于《java http post/get 服务端和客户端实现json传输》
最近需要写http post接口所以学习下。
总的还是不难直接上源码!
PostHttpClient.java 客户端
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity; /**
* ********************************************************
* 采用httpclient插件的post方式发送流二进制流数据到HTTP服务端
**********************************************************
* ---@author [zt_zoro1272@163.com ]
**********************************************************
* ---@version
**********************************************************
* ---@since 2014-8-28
*/
public class PostHttpClient { /**
* ********************************************************
* ---功能描述: 发送post请求,客户端采用二进制流发送,服务端采用二进制流介绍
**********************************************************
* ---@param json 入参的json格式的报文
* ---@param url http服务器的地址
* ---@return 返回响应信息
**********************************************************
* ---@author [zt_zoro1272@163.com ]
**********************************************************
* ---@since 2014-8-28
**********************************************************
* ---@update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
**********************************************************
*
*/
public static String postHttpReq(String json,String url) {
HttpClient httpClient = new HttpClient(); byte b[] = json.getBytes();//把字符串转换为二进制数据
RequestEntity requestEntity = new ByteArrayRequestEntity(b); EntityEnclosingMethod postMethod = new PostMethod();
postMethod.setRequestEntity(requestEntity);// 设置数据
postMethod.setPath(url);// 设置服务的url
postMethod.setRequestHeader("Content-Type", "text/html;charset=GBK");// 设置请求头编码 // 设置连接超时
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(
5 * 1000);
// 设置读取超时
httpClient.getHttpConnectionManager().getParams().setSoTimeout(20 * 1000); String responseMsg = "";
int statusCode = 0;
try {
statusCode = httpClient.executeMethod(postMethod);// 发送请求
responseMsg = postMethod.getResponseBodyAsString();// 获取返回值
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
postMethod.releaseConnection();// 释放连接
} if (statusCode != HttpStatus.SC_OK) {
System.out.println("HTTP服务异常" + statusCode);
}
return responseMsg;
} //POST方式发送HTTP请求
public static void main(String[] args) {
String json = "{\"PubInfo\": {\"clinet\": \"10.70.128.132\",\"company\": \"月月鸟0820\"},\"Request\": {\"strBillId\": \"18221075148\",\"strCcsOpId\": \"1234\"}}";
String url = "http://localhost:8080/httl_online/postHttpServer";
String outPackage = null;
outPackage = postHttpReq(json, url);
System.out.println("客户端日志----POST方式调用HTTP,请求报文为:" + json);
System.out
.println("\nauthor<pantp>===========客户端日志----POST方式调用HTTP服务,HTTP服务端响应报文如下:=============\n"); System.out.println(outPackage); System.out
.println("\nauthor<pantp>================================================================\n");
} }
PostHttpServer.java 服务端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.security.Principal;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; /**
* ********************************************************
* 模拟的一个Http服务,处理客户端的post请求
**********************************************************
* ---@author [zt_zoro1272@163.com ]
**********************************************************
* ---@version
**********************************************************
* ---@since 2014-8-28
*/
public class PostHttpServer extends HttpServlet { private static final long serialVersionUID = 1L; /*
* 代码逻辑分以下三部分:
* 1.获得请求报文
* 2.根据请求报文的信息去做业务逻辑,然后封装返回报文
* 3.输出相应报文
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String inJson = null;// 保存HTTP客户端请求报文
String outJson = null;// 保存HTTP服务端输出报文 // 获得输人报文然后打印出来
inJson = getInJson(request);
System.out
.println("\nauthor<pantp>===========服务端日志----POST方式接收HTTP请求,HTTP服务端收到的请求报文如下:==========\n");
System.out.println(inJson);
System.out
.println("\nauthor<pantp>=================================================================\n"); // 以下代码部分获得请求报文,然后去做校验,转换以及其他的调用其他的业务逻辑等,这里就不管它
// ........................................................................ // 下面部分是输出部分的处理
outJson = "{\"Response\": {\"code\": \"0\",\"message\": \"成功\",\"data\": \"12345\"}}";// 输出不部分也以JSON格式的字符串输出,这里我就写死 response.setContentType("application/json; charset=UTF-8");
response.getWriter().print(outJson);
} // 获得请求的报文,并作简单的校验
public String getInJson(HttpServletRequest request) throws IOException { byte buffer[] = new byte[64 * 1024];
InputStream in = request.getInputStream();// 获取输入流对象 int len = in.read(buffer);
// 必须对数组长度进行判断,否则在new byte[len]会报NegativeArraySizeException异常
if (len < 0) {
throw new IOException("请求报文为空");
} String encode = request.getCharacterEncoding();// 获取请求头编码
// 必须对编码进行校验,否则在new String(data, encode);会报空指针异常
if (null == encode || encode.trim().length() < 0) {
throw new IOException("请求报文未指明请求编码");
} byte data[] = new byte[len]; // 把buffer数组的值复制到data数组
System.arraycopy(buffer, 0, data, 0, len); // 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String
String inJson = new String(data, encode); return inJson;
} // 不提供get的处理方式
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String inJson = null;// 保存HTTP客户端请求报文
String outJson = null;// 保存HTTP服务端输出报文 // 获得输人报文然后打印出来
inJson = getInJson(request);
System.out
.println("\nauthor<pantp>===========服务端日志----POST方式接收HTTP请求,HTTP服务端收到的请求报文如下:==========\n");
System.out.println(inJson);
System.out
.println("\nauthor<pantp>=================================================================\n"); // 以下代码部分获得请求报文,然后去做校验,转换以及其他的调用其他的业务逻辑等,这里就不管它
// ........................................................................ // 下面部分是输出部分的处理
outJson = "{\"Response\": {\"code\": \"0\",\"message\": \"成功\",\"data\": \"12345\"}}";// 输出不部分也以JSON格式的字符串输出,这里我就写死 response.setContentType("application/json; charset=UTF-8");
response.getWriter().print(outJson);
} }
web.xml配置
<!-- 模拟HTTP的调用,写的一个只处理POST请求的http服务 -->
<servlet>
<servlet-name>PostHttpServer</servlet-name>
<servlet-class>com.sitechasia.xinnet.online.util.cloudhttp.PostHttpServer</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>PostHttpServer</servlet-name>
<url-pattern>/postHttpServer</url-pattern>
</servlet-mapping>
java http post/get 服务端和客户端实现json传输的更多相关文章
- Java的oauth2.0 服务端与客户端的实现
oauth原理简述 oauth本身不是技术,而是一项资源授权协议,重点是协议!Apache基金会提供了针对Java的oauth封装.我们做Java web项目想要实现oauth协议进行资源授权访问,直 ...
- java网络编程-单线程服务端与客户端通信
该服务器一次只能处理一个客户端请求;p/** * 利用Socket进行简单服务端与客户端连接 * 这是服务端 */public class EchoServer { private ServerSoc ...
- Java WebService 简单实例-服务端和客户端
转载自ITeye:https://www.iteye.com/topic/1135747/
- Java TCP服务端向客户端发送图片
/** * 1.创建TCP服务端,TCP客户端 * 2.服务端等待客户端连接,客户端连接后,服务端向客户端写入图片 * 3.客户端收到后进行文件保存 * @author Administrator * ...
- 一些java考过的测试题和自己制作模拟服务端和客户端
媒体 1,java环境变量: PATH: .;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; CLASSPATH: .;%JAVA_HOME%\jre\lib\rt.jar ...
- 用Java实现HTTP Multipart的服务端和客户端
今天简单介绍一下如何用Java支持HTTP Multipart的request和response. 整个项目的代码可以在https://github.com/mcai4gl2/multi下载. 在这个 ...
- Java 断点下载(下载续传)服务端及客户端(Android)代码
原文: Java 断点下载(下载续传)服务端及客户端(Android)代码 - Stars-One的杂货小窝 最近在研究断点下载(下载续传)的功能,此功能需要服务端和客户端进行对接编写,本篇也是记录一 ...
- python thrift 服务端与客户端使用
一.简介 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, ...
- 使用Apache CXF开发WebServices服务端、客户端
在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apache的官网,可以看到xfire已经被合并了. 最新的框架叫做CXF. Apache CXF = C ...
随机推荐
- jsonp 实现前端跨域
1.基于ajax 发起jsonp 请求. 前端代码: let url = 'http://localhost:8001/'; $.ajax({ type: 'get', dataType: 'json ...
- 2019-04-05 Spring Boot学习记录
1. 使用步骤 ① 在pom.xml 增加父级依赖(spring-boot-starter-parent) ② 增加项目起步依赖,如spring-boot-starter-web ③ 配置JDK版本插 ...
- call, apply 和 bind 方法
我们知道,每个函数在调用的时候会产生一个执行上下文环境,而这个执行上下文环境中包含了诸如 this 等等信息.即当我们调用函数的时候,内部的 this 已经明确地隐式绑定到了某一个对象上.如果我们希望 ...
- Xcode 打包(Shell)
1. xcodebuild 1.1 查当前可用的 sdk $xcodebuild -showsdks 1.2 查看所支持的target $xcodebuild -target 1.2 清空当前编译的a ...
- Flask 构建微电影视频网站(五)
基于角色的访问控制 权限管理 class AuthForm(FlaskForm): name = StringField( label='权限', validators=[ DataRequired( ...
- Shell 简单构建 Node web服务器
.git bash 执行代码生成: ./makeJs.sh 生成文件如下: 访问:http://127.0.0.1:3030/index.html makeJs.sh 代码如下: #create m ...
- python中的技巧——杂记
杂记 zip的用法 对于 a = [1,2,3] b = [3,2,1] 若要同时遍历 for x, y in zip(a, b): pass zip(a, b)=> [(1,2,3),(3,2 ...
- crontab计划任务实例
使用实例 实例1:每1分钟执行一次command 命令: * * * * * command 实例2:每小时的第3和第15分钟执行 命令: 3,15 * * * * command 实例3:在上午8点 ...
- 3-ftp搭建成功,服务器能访问,外网无法连接和访问
登录 ECS 管理控制台,找到相应的实例. 在实例的右侧单击管理,进入实例详情页面.选择本实例安全组. 在安全组列表页面,找到相应的安全组,单击配置规则. 在安全组规则页面,单击添加安全组规则. 在添 ...
- 我眼中的Adaboost
步骤: def buildStump(dataArr,classLabels,D): 1.循环取出数据集中的一个特征(一列)输入 (for:) 2.循环调整阀值threshVal (for:) 3, ...