1. 程式人生 > >httpurlconnection使用post傳值時web介面接收不到值

httpurlconnection使用post傳值時web介面接收不到值

最近好久沒有寫部落格了,因為上班的原因。今天想做一個點餐系統,移動版和伺服器版。資料使用json資料進行傳輸。但是碰見一個難題就是如何讓移動端將資料傳輸給伺服器,然後進行更新到資料庫。進入正題:
因為我使用的是httpurlconnection,大家都知道get請求的引數是放在url後面以?開頭&分割。但是如果我們引數多或者是引數不想讓別人知道的時候我們就要使用post,因為他的引數是放在相應頭裡面的,get傳輸資料很簡單就不講了,最主要是post傳引數,因為我在這裡遇見過幾個坑,其實不難,主要是一些小細節我們會不注意。
傳引數的程式碼:

URL u=new URL(url);
String param="pw="+URLEncoder.encode("丁丁","UTF-8"); HttpURLConnection h=(HttpURLConnection) u.openConnection(); h.setDoInput(true); h.setDoOutput(true); h.setRequestMethod("POST"); h.setRequestProperty("Connection", "Keep-Alive"
); h.setRequestProperty("Charset", "UTF-8"); h.connect(); //建立輸入流,向指向的URL傳入引數 DataOutputStream dos=new DataOutputStream(h.getOutputStream()); dos.writeBytes(param); dos.flush(); dos.close();

你會發現其實我們就是用這個上傳引數的,這裡面的各個意思就不需要介紹了吧,你以為這樣就可以了,事實上不行,我們發現tomcat不會列印“丁丁”這個值。但是我們的程式碼沒錯啊,也執行完了,開始我還以為是介面的問題,可是換get為什麼就沒問題呢,所以我覺得應該是我們自己的問題,後來我就一行行程式碼的去試,發現沒問題。我就加了幾行:

 int resultCode=h.getResponseCode();
                if(HttpURLConnection.HTTP_OK==resultCode){
                  StringBuffer sb=new StringBuffer();
                  String readLine=new String();
                  BufferedReader responseReader=new BufferedReader(new InputStreamReader(h.getInputStream(),"UTF-8"));
                  while((readLine=responseReader.readLine())!=null){
                    sb.append(readLine).append("\n");
                  }
                  responseReader.close();
                  Log.d("haha", sb.toString());

這下發現有用了,當然我就一行行去註釋執行,後來發現,只要加上上面這行程式碼就可以執行

 int resultCode=h.getResponseCode();

只要在傳輸完後加上這句就能傳引數,tomacat就能打印出值。至於原因我也不是太清楚。就是因為少加了這個,害我都搞不出來,都快崩潰了。後來就是這一行就有用了。可能有的人也碰見過坑,希望對大家有用