HttpURLConnection的使用(网络通信)

来源:互联网 发布:手机qq防盗软件 编辑:程序博客网 时间:2024/04/30 22:22

HttpURLConnection的使用(网络通信)
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);    }}
0 0
原创粉丝点击