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中 sfljfor (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 send
send ok
begin read
result:<?xml version="1.0" encoding="UTF-8"?><page><username>爱心天使</usernaem><age>26</age></page>
code 200
OK
response:您已经请求成功,这是响应数据!

源码下载:here

HttpURLConnection请求数据流的写入(write)和读取(read)相关推荐

  1. hbase原理与实践_JAVA连接HBase客户端及HBase写入数据和读取数据原理解析

    JAVA连接HBase客户端 接着上篇文章进行代码的实践,从JAVA 客户端对 HBase的客户端进行一系列操作 工具类:HbaseUtil 静态代码块一次性创建连接对象 并赋值 返回连接对象 Con ...

  2. 【Hadoop】HDFS文件写入与文件读取过程

    HDFS文件写入与文件读取过程 1. 文件读取过程 2. 文件写入过程 1. 文件读取过程 详细过程: 客户端通过调用FileSystem对象的open()来读取希望打开的文件. Client向Nam ...

  3. 解决Fiddler不能监听Java HttpURLConnection请求的方法

    在默认情况下,Fiddler不能监听Java HttpURLConnection请求.究其原因,Java的网络通信协议栈可能浏览器的通信协议栈略有区别,Fiddler监听Http请求的原理是 在应用程 ...

  4. poi导出excel写入公式_【java poi 写入Excel后读取公式值问题】poi导入excel

    java poi 写入Excel后读取公式值问题 不用改公式,只需要用cell.getNumericCellValue()获取,读出来就是正确的值了,如果你读出来的还有问题,说明你其他的地方写的还有问 ...

  5. python读excel并写入_python3 循环读取excel文件并写入json操作

    文件内容: excel内容: 代码: import xlrd import json import operator def read_xlsx(filename): # 打开excel文件 data ...

  6. 群晖NAS写入110MB/s读取2.1MB/s解决方法

    群晖NAS写入快读取慢,这个问题困扰我好久.我用FlashFXP传文件双向都能110MB/s,为什么网上邻居直接打开,写入很快,读取就那么慢,后来发现在硬盘映射的快捷方式中把\\SYNOLOGY,改成 ...

  7. js写入缓存和读取缓存

    js写入缓存和读取缓存 写入缓存 读取缓存 写入缓存 localStorage.setItem('name',data); //缓存名称为name,值为data 的数据 如果要给缓存设置有效期,可以在 ...

  8. python 写入文件后读取为空的问题

    python 写入文件后读取为空的问题 写一个小程序的时候,用到了py的文件处理方法.但是当我在写入后,立马使用readlines方法读取,读取为空. import os store_file = ' ...

  9. python读取写入文件_Python读取和写入文件

    1 从文件中读取数据 1.1 读取整个文件 创建名为test的txt文本文件,添加内容如下所示: 1234567890 2345678901 3456789012 实现代码: with open('t ...

最新文章

  1. 用stream将dgv中的数据导出到word或excel中小例子
  2. JavaScript中的箭头函数
  3. 『操作系统』 进程的描述与控制 Part2 进程同步
  4. oracle 抽样_深入理解Oracle动态采样
  5. oracle 11g 修改 sga,oracle 11g 调整SGA
  6. C# 操作线程的通用类[测试通过]
  7. mysql -数据库(备份与恢复)
  8. ai带来的革命_AI革命就在这里。 这与我们预期的不同。
  9. GB28181学习之路——eXosip获取IP和端口
  10. OPPO K9 Pro刷root强解锁BL刷面具Magisk框架 oppo k9pro root教程
  11. dwg文件如何转换成pdf?
  12. Python初学之温度转换
  13. python 3d绘图旋转_Python:如何围绕z轴旋转曲面并进行三维绘图?
  14. win10镜像无法再此计算机上运行,Win10镜像无法安装提示“运行此工具时出现问题”的两种解决方案...
  15. 华为6个月试用期经历
  16. 用MySQL模拟消息队列
  17. WPF下载图片到计算机
  18. 现在学习软件测试好找工作吗
  19. 机器学习通俗入门-Softmax 求解多类分类问题
  20. nginx视频在线播服务器,Windows环境上用jwplayer+Nginx搭建视频点播服务器

热门文章

  1. linux服务端修改EDT为东八区,EDT开发环境配置
  2. php rbac 菜单生成,RBAC集成AdminLTE后台主题对菜单进行控制
  3. mysql groupby php_php – MySQL,GroupBy OrderBy
  4. 接口测试——jemter生成HTML测试报告
  5. 接口测试——Jmeter常见问题解决方法
  6. python中plot画图_matplotlib基础绘图命令之errorbar的使用
  7. c语言的返回类型是指针变量吗,C语言-指针类型
  8. mysql 建模教程 pdf,PowerDesigner 15 系统分析与建模实战 PDF扫描版[50MB]
  9. 枪火游侠服务器停机维护,腾讯《枪火游侠》公布国服停运公告 11月30日正式关服...
  10. 运维部门工作总结_部门动态 | 主动出击 超前谋划 全面做好园区网络运维工作...