HttpURLConnection的使用(网络通信)
2015-10-14 15:52
621 查看
HttpURLConnection的使用(网络通信)
URLConnection类给应用程序和web资源之间架设起了通信的桥梁,
这些web资源通常是通过url来标记的,本文将讲述如何使用HttpURLConnection来访问web页面(发送数据流)和读取数据流。
案例:连个servlet的通信:
1、客户端的发送和接受数据:
HttpURLConnection +
URL+
OutputStream(写入数据)—-通过httpurlconnection获取+
InputStream(读取数据))—-通过httpurlconnection获取
2、服务器的接受和回应数据:
ServletInputStream(request中获取)–读取数据
PrintWriter(response中获取)—–相应数据
URLConnection类给应用程序和web资源之间架设起了通信的桥梁,
这些web资源通常是通过url来标记的,本文将讲述如何使用HttpURLConnection来访问web页面(发送数据流)和读取数据流。
案例:连个servlet的通信:
1、客户端的发送和接受数据:
HttpURLConnection +
URL+
OutputStream(写入数据)—-通过httpurlconnection获取+
InputStream(读取数据))—-通过httpurlconnection获取
package com; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") public class IOServlet extends HttpServlet { /** * 对于主动请求其它接口的参数流写入(POST方式) */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("begin send"); //=================================1 String inputParam = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><page><username>爱心天使</usernaem><age>26</age></page>"; URL url = null; HttpURLConnection httpConn = null; OutputStream output = null; OutputStreamWriter outr = null; url = new URL("http://127.0.0.1:8888/iotest/ReadServlet"); httpConn = (HttpURLConnection) url.openConnection(); HttpURLConnection.setFollowRedirects(true); httpConn.setDoOutput(true); httpConn.setRequestMethod("POST"); httpConn.setRequestProperty("Content-Type", "text/xml"); httpConn.connect(); output = httpConn.getOutputStream(); outr = new OutputStreamWriter(output); // 写入请求参数 outr.write(inputParam.toString().toCharArray(), 0, inputParam .toString().length()); outr.flush(); outr.close(); System.out.println("send ok"); //============================2 int code = httpConn.getResponseCode(); System.out.println("code " + code); //==============================6 200 System.out.println(httpConn.getResponseMessage()); //==============7 OK //读取响应内容 String sCurrentLine = ""; String sTotalString = ""; if (code == 200) { java.io.InputStream is = httpConn.getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader(is)); while ((sCurrentLine = reader.readLine()) != null) if (sCurrentLine.length() > 0) sTotalString = sTotalString + sCurrentLine.trim(); } else { sTotalString = "远程服务器连接失败,错误代码:" + code; } System.out.println("response:" + sTotalString); //===============8 response:您已经请求成功,这是响应数据! } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
2、服务器的接受和回应数据:
ServletInputStream(request中获取)–读取数据
PrintWriter(response中获取)—–相应数据
package com; 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; @SuppressWarnings("serial") public class ReadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { System.out.println("begin read"); //==========================================3 ServletInputStream inStream = request.getInputStream(); // 取HTTP请求流 int size = request.getContentLength(); // 取HTTP请求流长度 byte[] buffer = new byte[size]; // 用于缓存每次读取的数据 byte[] in_b = new byte[size]; // 用于存放结果的数组 int count = 0; int rbyte = 0; // 循环读取 while (count < size) { rbyte = inStream.read(buffer); // 每次实际读取长度存于rbyte中 sflj for (int i = 0; i < rbyte; i++) { in_b[count + i] = buffer[i]; } count += rbyte; } System.out.println("result:" + new String(in_b,0,in_b.length)); //===============================4 //result:<?xml version="1.0" encoding="UTF-8"?><page><username>爱心天使</usernaem><age>26</age></page> response.setContentType("text/html"); //注意响应中文数据时要设置 response.setCharacterEncoding("GBK"); PrintWriter out = response.getWriter(); //回与响应数据 out.write("您已经请求成功,这是响应数据!"); //================================5 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
相关文章推荐
- 网络编程实践陈硕笔记一
- 浅谈HTTP,TCP,UDP
- 微信公众平台支付 该网站暂时无法访问 网络接口可能被某些软件修改 请重置接入点设置后重新加载该网页,微信支付各种坑
- 软测试-计算机组成原理、系统和网络安全机构
- 《深入理解Linux网络技术内幕》阅读笔记(二十九)
- 在java网络编程中实现服务器和客户端一对一的聊天
- Android中间httpclient发送帧get求
- HttpClient异常总结
- 《UNIX网络编程》读书笔记1---简介和TCP/IP
- 一种基于浏览器内核修改的复杂网站layout/渲染bug的HTTP重放调试系统
- http://www.cnblogs.com/AloneSword/p/3821569.html
- 网络编码究极入门贴
- NSURLSession类分析
- IOS Android Tomcat SSL双向认证HTTPS访问
- 检测SDWebImage有没有缓存图片 IOS 获取网络图片大小
- WP开发 - HttpWebRequest的GetResponse或GetRequestStream的超时问题
- OSI模型之网络层概述
- Heritrix3.3.0源码阅读 crawler-beans.cxml中处理器链的配置
- 如何解决在Azure上部署Sqlserver网络访问不了
- C++ 用libcurl库进行http通讯网络编程