现在越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源 ,今天就来讨论下 json 的传输形式。
Client 客户端
package httpjson;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import net.sf.json.JSONObject;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.log4j.Logger;
import org.junit.Test;
public class ClientDemo {
private final static Logger _log = Logger.getLogger(ClientDemo.class);
@Test
public void login(){
String url = "http://192.168.0.3:8081/httpjson/demoHttpJson" ;
// String url = "http://www.weibo.com.cn" ;
JSONObject json = new JSONObject();
json.put("username","test");
json.put("password", "test");
doPostClient(json, url);
}
@SuppressWarnings("deprecation")
public static void doPostClient(JSONObject json ,String url){
HttpClient httpClient = new HttpClient();
//httpClient.getState().setCookiePolicy(CookiePolicy.COMPATIBILITY);
System.setProperty("apache.commons.httpclient.cookiespec","COMPATIBILITY");
PostMethod postMethod = new PostMethod(url);
InputStream in = new ByteArrayInputStream(json.toString().getBytes());
postMethod.setRequestBody(in);
HttpClientParams params = new HttpClientParams();
params.setConnectionManagerTimeout(10000L);
httpClient.setParams(params);
try {
httpClient.executeMethod(postMethod);
//获取二进制的byte流
byte[] b = postMethod.getResponseBody();
String str = new String(b,"UTF-8");
_log.debug("client:"+str);
}catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage()+","+e.getStackTrace());
}finally{
postMethod.releaseConnection();
}
}
}
Service 服务端
package httpjson;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.log4j.Logger;
/**
* Servlet implementation class DemoHttpJson
*/
public class DemoHttpJson extends HttpServlet {
private static final long serialVersionUID = 1L;
private final static Logger _log = Logger.getLogger(HttpJsonUtil.class);
/**
* Default constructor.
*/
public DemoHttpJson() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletInputStream servletInputStream = request.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream ();
byte[] b = new byte[1024];
int i = 0;
// inputStream 转 byte
while((i = servletInputStream.read(b,0,1024))>0){
out.write(b,0,i);
}
byte[] req = out.toByteArray();
String str = new String(req,"UTF-8");
JSONObject reqJson = JSONObject.fromObject(str);
JSONObject json = new JSONObject();
json.put("VER","1.0");
if(reqJson.get("username").equals("demo")){
json.put("msg","true");
_log.debug("登录成功");
}else{
json.put("msg","false");
_log.debug("登录失败");
}
PrintWriter pw = response.getWriter();
pw.write(json.toString());
}
}
执行 public void login()
控制台日志
service log
[11/10/11 00:09:48] [DemoHttpJson-DEBUG 64] 登录失败
client log
[11/10/11 00:09:48] [ClientDemo-DEBUG 46] client:
{"VER":"1.0","msg":"false"}
Java源代码搜索引擎 值得学习 .http://grepcode.com/search?query=HttpClient&start=0&entity=type&n=
分享到:
相关推荐
在本文中,我们将深入探讨如何使用HttpClient进行POST请求,特别是发送二进制/字节流/byte[]数据。 ### HttpClient 3.x 实例 在HttpClient 3.x版本中,我们使用`HttpClient`类来创建一个HTTP客户端实例,然后通过`...
HTTP二进制是一种在网络通信中传输二进制数据的方式,特别是在HTTP协议中。HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,它主要用于传输文本、图像、音频和视频等多种类型的数据,其中就包括二进制...
Protocol buffers是一种编码方法构造的一种有效而可扩展的格式的数据。 谷歌使用其内部几乎RPC协议和文件格式的所有协议缓冲区。 C#protobuf如何实现http方式二进制传输的一个例子及说明文档
2. **内存到二进制图片**:相反,若要将图片保存回二进制流,我们可以使用`ImageIO.write(BufferedImage, String, OutputStream)`方法,将内存中的图像写入输出流,这里的字符串参数指定图像格式(如"jpg", "png")...
HttpClient模拟客户端传输文件是Java开发中的常见需求,尤其在与服务器进行交互时,例如上传用户数据、图片或者其他文件。在这个过程中,我们通常会使用POST请求将文件作为请求体发送到服务器。 首先,我们需要引入...
本实例将深入讲解如何使用HttpClient进行网络传输。 一、HttpClient基本概念 HttpClient是一个实现了HTTP/1.0和HTTP/1.1协议的客户端编程工具包。它不仅支持基本的HTTP方法,还支持HTTPS、Cookie管理、连接池、...
值得注意的是,在使用HttpClient时,它基于传统的阻塞IO模型来实现网络通信,这意味着在单个线程中,整个请求/响应过程是同步阻塞的。这对于简单的应用场景来说并无大碍,但在高并发的情况下可能会导致性能问题。 ...
android HttpClient 获取网络图片 实例
本篇文章将深入探讨如何使用`HttpClient`来获取网络资源,以及处理返回的XML数据。 首先,我们需要了解`HttpClient`的基本用法。在Java中,创建一个`HttpClient`实例是获取网络资源的第一步。`HttpClient`提供了...
6. **数据库优化**:为了提高性能,可以考虑使用数据库的二进制列类型如SQL Server的VARBINARY(MAX),或者存储过程来处理图片数据,以减少网络传输和数据库操作的开销。 7. **安全性**:在处理用户上传的图片时,...
至此,我们已经成功地使用Java的HttpClient库将一个对象转换为XML字符串,并以二进制流的方式发送到了服务器。这个过程中涉及的关键技术包括对象到XML的转换(JAXB)、流操作(ByteArrayOutputStream和...
在这个主题中,我们将专注于如何使用HttpClient发送POST请求并传输JSON数据。在实际的Web服务开发和API调用中,这是一个非常常见的需求。 首先,理解POST请求:与GET请求不同,POST请求通常用于向服务器发送数据,...
关于"post请求"和"传输文件"的标签,HttpClient提供了一套完整的解决方案。在POST请求中,使用HttpPost对象来指定请求URL,然后可以通过HttpEntityEnclosingRequestBase类的setEntity()方法添加请求实体,这个实体...
从网络获取数据和图片,用gson解析并用listview展示
标题中的“对于C#(HttpClient)方式网络请求的封装”是指使用C#编程语言,特别是通过HttpClient类来处理HTTP网络请求,并将这个过程进行抽象和封装,以便在多个地方重复使用。HttpClient是.NET Framework和.NET ...
HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。
`commons-httpclient-3.0.jar`是Apache HttpClient 3.0版本的二进制库文件,包含了HttpClient的所有类和方法,开发者可以通过导入这个库来使用HttpClient的相关功能。而`HttpUtil.java`可能是一个自定义的Java类,...
在Java环境中,`httpclient.jar`是HttpClient库的二进制文件,通常通过Maven或Gradle等构建工具作为依赖引入项目。将`httpclient.jar`下载并添加到项目类路径中,即可使用HttpClient的功能。 总的来说,HttpClient...