HttpUrlConnection网络连接

来源:互联网 发布:美国读博士条件知乎 编辑:程序博客网 时间:2024/06/14 20:24

  首先我们要了解的是HttpUrlConnection是由Sun公司封装好的网络连接,通过其中的Get和Post方法来获得客户端和服务器提供的数据。
  我们要知道,获得数据的方法有两种,分别是doGet方法doPost方法。首先我们要了解两种该方法的区别。

Get方法

  通过Get方法向服务器提供数据是将数据加在url后面的。提供数据的方式是显式的。

Post方法

  通过Post向服务器提供数据的方式是隐式的,将数据通过getOutputStream().write(byte[] array)的方法传送给服务器。


  下面来总结一下通过Sun公司封装的HttpUrlConnection给服务器传送数据的步骤。

doGet

  1. 定义url字符串。
    即:将要访问的服务器网址定义为一个字符串,并在字符串的最后加“?”然后加上要传入的数据。
  2. 生成URL 。
    将定义的字符串生成一个URL类的对象。
  3. 打开URL连接 并将其强制造型成HttpUrlConnection类型的对象。
    通过URL与服务器建立连接。并将连接强制转换为HttpUrlConnection类型。
  4. 设置请求方式。
    设置请求方式为”GET“类型,
  5. 设置编码类型。
    设置接受的数据类型。httpurlconn.setRequestProperty("Accept-Charset", "utf-8");
    设置可以接受的序列化的java对象。httpurlconn.setRequestProperty("Context-Type", "application/x-www-form-urlencoded");

  6. 设置超时时间
    由于服务器响应时间可能过长,所以可以设置超时时间。

  7. 获取状态码。
    如果状态码为200,则表明可以正常访问服务器。
  8. 获取读取的数据

整体的代码如下:

String urlString = "http://localhost:8080/MyServerletTest/MyServerletTest?username=xiaohua&password=12345";                try {                    //定义URL                    URL url = new URL(urlString);                    //打开URL连接                    URLConnection conn =  url.openConnection();                    //强制转换为HTTPUrlConnection类型                    HttpURLConnection httpurlconn = (HttpURLConnection) conn;                    //设置请求方式                    httpurlconn.setRequestMethod("GET");                    //设置连接超时时间                    httpurlconn.setReadTimeout(3000);                    //设置编码格式                    //设置接受的数据类型                    httpurlconn.setRequestProperty("Accept-Charset", "utf-8");                    //设置可以序列化的java对象                    httpurlconn.setRequestProperty("Context-Type", "application/x-www-form-urlencoded");                    int code = httpurlconn.getResponseCode();                    System.out.println("获得的状态码是:"+code);                    if(code==HttpsURLConnection.HTTP_OK){                        InputStream is = httpurlconn.getInputStream();                        BufferedReader br = new BufferedReader(new InputStreamReader(is));                        String line = br.readLine();                        while(line != null){                            System.out.println(line);                            line = br.readLine();                        }                                   }                } catch (MalformedURLException e1) {                    e1.printStackTrace();                } catch(SocketTimeoutException e2){                    System.out.println("网络连接超时!请重新请求或者关闭!啊哈哈哈哈……");                }catch (IOException e3) {                }

doPost

  1. 定义url字符串。
    即:将要访问的服务器网址定义为一个字符串.
  2. 生成URL 。
    将定义的字符串生成一个URL类的对象。
  3. 打开URL连接 并将其强制造型成HttpUrlConnection类型的对象。
    通过URL与服务器建立连接。并将连接强制转换为HttpUrlConnection类型。
  4. 设置请求方式。
    设置请求方式为”POST“类型,
  5. 设置编码类型。 设置接受的数据类型。httpurlconn.setRequestProperty("Accept-Charset", "utf-8");设置可以接受的序列化的java对象。httpurlconn.setRequestProperty("Context-Type", "application/x-www-form-urlencoded");
  6. 设置相关参数
     设置可以读取服务器返回的内容。因为默认为true,因此可以不写。
     设置客户端可以给用户提交数据。默认为false,setDoOutput(true);必须设置!!!!
     设置服务器不允许读缓存!setUseCaches(false);
  7. 设置参数String param = “提交的数据内容”;
    提交数据getOutputStream().write(byte[] array);
  8. 设置超时时间
    由于服务器响应时间可能过长,所以可以设置超时时间。
  9. 获取状态码。
    如果状态码为200,则表明可以正常访问服务器。
  10. 获取读取的数据

整体的代码如下:

    String urlString  = "http://localhost:8080/MyServerletTest/MyServerletTest";    try {            URL url = new URL(urlString);            HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();            //设置请求方式            httpConnection.setRequestMethod("POST");            //设置超时时间            httpConnection.setReadTimeout(2000);            //设置编码格式            //设置接受的数据类型            httpConnection.setRequestProperty("Accept-Charset", "utf-8");            //设置可以序列化的java对象            httpConnection.setRequestProperty("Context-Type", "application/x-www-form-urlencoded");            // 设置可以读取服务器返回的内容            //httpConnection.setDoInput(true);            //设置服务器接收客户端串入的内容。            httpConnection.setDoOutput(true);            //设置不可已接受缓存内容。            httpConnection.setUseCaches(false);            //设置传入的参数内容            String params = "username=zhangsan&password=123456";            //提交数据            httpConnection.getOutputStream().write(params.getBytes());            int code = httpConnection.getResponseCode();            if(code==HttpURLConnection.HTTP_OK){                System.out.println("获得的连接状态码是:"+code);                //从服务器读数据                InputStream is = httpConnection.getInputStream();                BufferedReader br = new BufferedReader(new InputStreamReader(is));                String line = br.readLine();                while(line!=null){                    System.out.println(line);                    line = br.readLine();                       }            }                           } catch (MalformedURLException e1) {            e1.printStackTrace();        } catch (IOException e1) {            e1.printStackTrace();    }
0 0
原创粉丝点击