HttpUrlConnection网络连接

  首先我们要了解的是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();
    }

你可能感兴趣的:(get和post)