posts - 241,  comments - 116,  trackbacks - 0

          Java中可以使用HttpURLConnection來請求WEB資源。

           

          1、 URL請求的類別

          分為二類,GET與POST請求。二者的區別在于:
          a:) get請求可以獲取靜態頁面,也可以把參數放在URL字串后面,傳遞給servlet,

          b:) post與get的不同之處在于post的參數不是放在URL字串里面,而是放在http請求的正文內。

           

           

          2、URLConnection的對象問題

          1. URL url = new URL("http://localhost:8080/TestHttpURLConnectionPro.do");  
          2.   
          3. URLConnection rulConnection = url.openConnection();// 此處的urlConnection對象實際上是根據URL的  
          4.           // 請求協議(此處是http)生成的URLConnection類  
          5.           // 的子類HttpURLConnection,故此處最好將其轉化  
          6.           // 為HttpURLConnection類型的對象,以便用到  
          7.           // HttpURLConnection更多的API.如下:  
          8.   
          9. HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection; 
          3、HttpURLConnection對象參數問題
          1. // 設置是否向httpUrlConnection輸出,因為這個是post請求,參數要放在  
          2. // http正文內,因此需要設為true, 默認情況下是false;  
          3. httpUrlConnection.setDoOutput(true);  
          4.   
          5. // 設置是否從httpUrlConnection讀入,默認情況下是true;  
          6. httpUrlConnection.setDoInput(true);  
          7.   
          8. // Post 請求不能使用緩存  
          9. httpUrlConnection.setUseCaches(false);  
          10.   
          11. // 設定傳送的內容類型是可序列化的java對象  
          12. // (如果不設此項,在傳送序列化對象時,當WEB服務默認的不是這種類型時可能拋java.io.EOFException)  
          13. httpUrlConnection.setRequestProperty("Content-type""application/x-java-serialized-object");  
          14.   
          15. // 設定請求的方法為"POST",默認是GET  
          16. httpUrlConnection.setRequestMethod("POST");  
          17.   
          18. // 連接,從上述第2條中url.openConnection()至此的配置必須要在connect之前完成,  
          19.         httpUrlConnection.connect(); 
          4、HttpURLConnection連接問題
          1. // 此處getOutputStream會隱含的進行connect(即:如同調用上面的connect()方法,  
          2. // 所以在開發中不調用上述的connect()也可以)。  
          3. OutputStream outStrm = httpUrlConnection.getOutputStream();
          5、HttpURLConnection寫數據與發送數據問題
          1. // 現在通過輸出流對象構建對象輸出流對象,以實現輸出可序列化的對象。  
          2. ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm);  
          3.   
          4. // 向對象輸出流寫出數據,這些數據將存到內存緩沖區中  
          5. objOutputStrm.writeObject(new String("我是測試數據"));  
          6.   
          7. // 刷新對象輸出流,將任何字節都寫入潛在的流中(些處為ObjectOutputStream)  
          8. objOutputStm.flush();  
          9.   
          10. // 關閉流對象。此時,不能再向對象輸出流寫入任何數據,先前寫入的數據存在于內存緩沖區中,  
          11. // 在調用下邊的getInputStream()函數時才把準備好的http請求正式發送到服務器  
          12. objOutputStm.close();  
          13.   
          14. // 調用HttpURLConnection連接對象的getInputStream()函數,  
          15. // 將內存緩沖區中封裝好的完整的HTTP請求電文發送到服務端。  
          16. InputStream inStrm = httpConn.getInputStream(); // <===注意,實際發送請求的代碼段就在這里  
          17.   
          18. // 上邊的httpConn.getInputStream()方法已調用,本次HTTP請求已結束,下邊向對象輸出流的輸出已無意義,  
          19. // 既使對象輸出流沒有調用close()方法,下邊的操作也不會向對象輸出流寫入任何數據.  
          20. // 因此,要重新發送數據時需要重新創建連接、重新設參數、重新創建流對象、重新寫數據、  
          21. // 重新發送數據(至于是否不用重新這些操作需要再研究)  
          22. objOutputStm.writeObject(new String(""));  
          23. httpConn.getInputStream(); 
          6、post參數的方法
          1. OutputStream os = httpConn.getOutputStream();  
          2.             String param = new String();  
          3.             param = "CorpID=" + CorpID +  
          4.                     "&LoginName=" + LoginName+  
          5.                     "&send_no=" + phoneNumber +  
          6.                     "&msg=" + java.net.URLEncoder.encode(msg,"GBK"); ;  
          7.             os.write(param.getBytes()); 
          posted on 2011-06-28 09:50 墻頭草 閱讀(4565) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 偃师市| 长泰县| 中牟县| 鸡泽县| 大冶市| 武宣县| 惠东县| 从江县| 荆门市| 德州市| 汉寿县| 建平县| 新巴尔虎右旗| 商河县| 隆林| 紫金县| 饶阳县| 阿坝县| 葫芦岛市| 房山区| 潜山县| 宕昌县| 上饶县| 内江市| 西吉县| 横峰县| 新宾| 海城市| 灌阳县| 通海县| 屏东县| 常州市| 建始县| 乐山市| 册亨县| 合川市| 邛崃市| 宁津县| 沂源县| 怀仁县| 达尔|