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(相当于被请求的服务器):http://www.shengshiyouxi.com


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 send


send ok


begin read


result:<?xml version="1.0" encoding="UTF-8"?><page><username>爱心天使</usernaem><age>26</age></page>


code 200


OK


response:您已经请求成功,这是响应数据!

HttpURLConnection请求数据流的写入(write)和读取(read)的更多相关文章

  1. HttpURLConnection请求

    方法调用: //测试 public static void main(String[] args) { Map map = new HashMap(); map.put("type" ...

  2. Android使用HttpUrlConnection请求服务器发送数据详解

    HttpUrlConnection是java内置的api,在java.net包下,那么,它请求网络同样也有get请求和post请求两种方式.最常用的Http请求无非是get和post,get请求可以获 ...

  3. 使用PHP文件锁写一个多个请求同时并发写入一个文件,要求不脏读、数据不丢失

    使用PHP文件锁写一个多个请求同时并发写入一个文件,要求不脏读.数据不丢失. //并发文件操作 function filehandle($filename,$data){ $start = 0; $e ...

  4. Javascript写入txt和读取txt文件的方法

    文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Va ...

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

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

  6. ELK之logstash收集日志写入redis及读取redis

    logstash->redis->logstash->elasticsearch 1.安装部署redis cd /usr/local/src wget http://download ...

  7. 使用Fiddler监听java HttpURLConnection请求

    使用Fiddler监听java HttpURLConnection请求

  8. js的cookie写入存储与读取

    js的cookie写入存储与读取 在路径url截取需要的数据,存储到cookie里,读取成功并实现跳转. //写cookies 过期时间 2小时后 function setCookie(c_name, ...

  9. 分享自己配置的HttpURLConnection请求数据工具类

    >>该工具类传入string类型url返回string类型获取结果import java.io.BufferedReader;import java.io.InputStream;impo ...

随机推荐

  1. u-boot的nand驱动写过程分析

    从命令说起,在u-boot输入下列命令: nand write 40008000 0 20000 命令的意思是将内存0x40008000开始的部分写入nand,从nand地址0开始写,写入长度是0x2 ...

  2. badi增强

    对于根据事务代码查找对应的BADI,网上介绍的方法很多,但总结下来无非就两种方法,在此把它记录下来,方便以后自己查阅了. (1)通过SE24,输入CL_EXITHANDLER,然后在方法GET_INS ...

  3. Webbrowser加载Flash后方向键失效问题(用到了OLE接口,没有被处理就转发,够复杂的)

    原文:http://blog.csdn.net/dropme/article/details/6253528 窗体上放一个ApplicationEvent控件,OnMessage事件中这么写 uses ...

  4. table明明设置了固定值

    IE真的快把我搞死了 0.0 可爱的迷人的让人醉了的IE你真棒 今天用表格写一个4列的表格 要实现的效果大概是这种 确有用普通浏览器都没有问题 非常easy明了的一个表格嘛!用IE8下面的看就成这样子 ...

  5. git flow 的使用

     在这里主要讲一下我在项目中用到的关于gitflow的使用方法.   公司的项目中,专门有一台用来存放版本号库的server,路径是在默认的安装文件夹/opt/git/,那么在使用的时候,假设你是 ...

  6. Java生成文件

    Java生成文件 1.说明 以文件路径作为參数,推断该文件是否存在,若不存在就创建文件.并输出文件路径 2.实现源代码 /** * @Title:BuildFile.java * @Package:c ...

  7. 动态创建按钮的JS

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML>  <HEA ...

  8. hdu 2842 Chinese Rings

    点击打开hdu2842 思路: 矩阵快速幂 分析: 1 题目的意思是给定n个环,和一些规则要把所有的环全部拆下最少需要的步数 2 题目规定如果要拆第n个环,那么第n-1个要挂着,n-2环要被拆下.那么 ...

  9. eclipse中我要同时看两个console

    eclipse中我要同时看两个console 有一个按钮“New Console View”,可以让你再建一个Console,还有一个按钮“Display Selected Console”,可以在两 ...

  10. 2013 吉林通化邀请赛 D-City 离线型的并查集

    题意:给定n个点和m条边,问你拆掉前i条边后,整个图的连同城市的数量. i从1到m. 思路:计算连通的城市,很容易想到并查集,但是题目里是拆边,所以我们可以反向去做. 存下拆边的信息,从后往前建边. ...