Java Post 資料請求和接收__Java

來源:互聯網
上載者:User

      這兩天在做http服務端請求操作,用戶端post資料到服務端後,服務端通過request.getParameter()進行請求,無法讀取到資料,搜尋了一下發現是因為設定為text/plain模式才導致讀取不到資料

   urlConn.setRequestProperty("Content-Type","text/plain; charset=utf-8");
      若設定為以下方式,則通過request.getParameter()可以讀取到資料

   urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

 enctype的三種編碼

        form表單中enctype屬性可以用來控制對錶單資料的發送前的如何進行編碼,即在發送到伺服器之前,所有字元都會進行編碼(空格轉換為 "+" 加號,特殊符號轉換為 ASCII HEX 值)。預設是application/x-www-form-urlencoded。

        multipart/form-data用於發送二進位的檔案,其他兩種類型不能用於傳送檔案

      text/plain用於發送純文字內容,不對特殊字元進行編碼,一般用於email之類的。

        application/x-www-form-urlencoded和text/plain的區別簡單講就是一個發送html內容,一個發送純文字內容 application/x-www-form-urlencoded    在發送前編碼所有字元(預設) multipart/form-data    不對字元編碼。在使用包含檔案上傳控制項的表單時,必須使用該值。 text/plain    空格轉換為 "+" 加號,但不對特殊字元編碼。
當定義enctype為application/x-www-form-urlencoded時,使用以下方式接收資料

       request.getParameter(參數名);

當定義enctype為text/plain時,使用以下方式接收資料

        // 接收請求資料        BufferedReader reader = request.getReader();        char[] buf = new char[512];        int len = 0;        StringBuffer contentBuffer = new StringBuffer();        while ((len = reader.read(buf)) != -1) {            contentBuffer.append(buf, 0, len);        }        String content = contentBuffer.toString();                if(content == null){            content = "";        }
  post 與get

               post和get可以通過索引值對的方式進行參數傳輸,服務端通過request.getparameter方式進行請求擷取資料。
用戶端post資料到服務端,服務端接收處理

public class UrlConnection {        @SuppressWarnings("finally")    public static boolean response(String url,String content) {        String line         = "";        String message        = "";        String returnData   = "";        boolean postState     = false;        BufferedReader bufferedReader = null;                try {            URL urlObject = new URL(url);            HttpURLConnection urlConn = (HttpURLConnection) urlObject.openConnection();            urlConn.setDoOutput(true);            /*設定禁用緩衝*/            urlConn.setRequestProperty("Pragma:", "no-cache");                  urlConn.setRequestProperty("Cache-Control", "no-cache");            /*維持長串連*/            urlConn.setRequestProperty("Connection", "Keep-Alive");              /*設定字元集*/            urlConn.setRequestProperty("Charset", "UTF-8");            /*設定輸出格式為json*/            urlConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");            /*設定使用POST的方式發送*/            urlConn.setRequestMethod("POST");                         /*設定不使用緩衝*/            urlConn.setUseCaches(false);            /*設定容許輸出*/            urlConn.setDoOutput(true);              /*設定容許輸入*/            urlConn.setDoInput(true);                          urlConn.connect();                        OutputStreamWriter outStreamWriter = new OutputStreamWriter(urlConn.getOutputStream(),"UTF-8");             outStreamWriter.write(content);            outStreamWriter.flush();            outStreamWriter.close();                        /*若post失敗*/            if((urlConn.getResponseCode() != 200)){                returnData = "{\"jsonStrStatus\":0,\"processResults\":[]}";                message = "發送POST失敗。"+ "code="+urlConn.getResponseCode() + "," + "失敗訊息:"+ urlConn.getResponseMessage();                // 定義BufferedReader輸入資料流來讀取URL的響應                InputStream errorStream = urlConn.getErrorStream();                                 if(errorStream != null)                {                    InputStreamReader inputStreamReader = new InputStreamReader(errorStream,"utf-8");                    bufferedReader = new BufferedReader(inputStreamReader);                                    while ((line = bufferedReader.readLine()) != null) {                          message += line;                        }                             inputStreamReader.close();                }                errorStream.close();                System.out.println("發送失敗。錯誤資訊為:"+message);                              }else{                /*發送成功返回傳送成功狀態*/                postState = true;                                // 定義BufferedReader輸入資料流來讀取URL的響應                InputStream inputStream = urlConn.getInputStream();                                  InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf-8");                bufferedReader = new BufferedReader(inputStreamReader);                            while ((line = bufferedReader.readLine()) != null) {                      message += line;                  }                        returnData = message;                inputStream.close();                inputStreamReader.close();                                System.out.println("發送POST成功。返回內容為:" + message);                                    }        } catch (Exception e) {            e.printStackTrace();        }finally{            try {                   if (bufferedReader != null) {                      bufferedReader.close();                  }                              } catch (IOException ex) {                  ex.printStackTrace();              }                      return postState;        }    }        /*讀取request資料*/    public static String getRequestData(HttpServletRequest request) throws IOException{        BufferedReader reader = request.getReader();        char[] buf = new char[512];        int len = 0;        StringBuffer contentBuffer = new StringBuffer();        while ((len = reader.read(buf)) != -1) {            contentBuffer.append(buf, 0, len);        }                String content = contentBuffer.toString();                if(content == null){            content = "";        }                return content;    }}




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.