HttpURLConnection请求数据流的写入(write)和读取(read)
来源:互联网 发布:英雄无敌for mac 编辑:程序博客网 时间:2024/06/01 08:15
URLConnection类给应用程序和web资源之间架设起了通信的桥梁,这些web资源通常是通过url来标记的,本文将讲述如何使用HttpURLConnection来访问web页面(发送数据流)和读取数据流。
在Servlet中对于需要用post方式(get会暴露参数)写入参数的时候就用到了HttpURLConnection.
请求的Servlet,也可以写入main方法中进行测试
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"); 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"); int code = httpConn.getResponseCode(); System.out.println("code " + code); System.out.println(httpConn.getResponseMessage()); //读取响应内容 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); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}
ReadServlet(相当于被请求的服务器):
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"); 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)); response.setContentType("text/html"); //注意响应中文数据时要设置 response.setCharacterEncoding("GBK"); PrintWriter out = response.getWriter(); //回与响应数据 out.write("您已经请求成功,这是响应数据!"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}
打开页面:http://localhost:8888/iotest/IOServlet
你会在后台看到如下输出说明你已经成功了:
begin sendsend okbegin readresult:<?xml version="1.0" encoding="UTF-8"?><page><username>爱心天使</usernaem><age>26</age></page>code 200OKresponse:您已经请求成功,这是响应数据!
源码下载:here
- HttpURLConnection请求数据流的写入(write)和读取(read)
- HttpURLConnection请求数据流的写入(write)和读取(read)
- HttpURLConnection请求数据流的写入(write)和读取(read)
- day18FileReader读取一种read方法和字符串读取,fileWriter的写入write方法,时间的类calendar
- 第六章 Read-Write Lock(适合读取比写入次数频繁的时候)
- 笔记:HDFS读取和写入数据流
- java的write和read
- 使用 read 和 write 将code直接写入硬盘
- Read data 读请求数据流
- HttpUrlConnection的GET请求和POST请求
- httpurlconnection的Get请求和Post请求
- rapidjson的read和write的sample
- rapidjson的read和write的sample
- rapidjson的read和write的sample
- rapidjson的read和write的sample
- Linux -C 的read 和 write函数
- 关于read和write的读写问题
- 关于socket的read和write
- C++中的单例模式
- JQuery Mobile 两个页面之间的参数传递
- 在chrome浏览器查看js源码时,中文乱码的解决
- POJ 1120
- plsql使用自定义的嵌套表
- HttpURLConnection请求数据流的写入(write)和读取(read)
- 转屏相关的权威解释
- 在一个应用中启动另一个已安装的应用
- intent 使用
- 我的C#之旅
- 经典IT职业面试英语问答
- android中动态实现全屏和动态退出全屏方法
- 通过sys.dm_exec_requests看index缺失情况
- DM9000A基地址的确定