首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

HttpClient josn网络传输(二进制的byte源)

2012-11-14 
HttpClientjosn网络传输(二进制的byte流)现在越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络

HttpClient josn网络传输(二进制的byte流)
现在越来越多的 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);@Testpublic 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 exceptionSystem.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 stubthis.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 转 bytewhile((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=



热点排行