posts - 241,  comments - 116,  trackbacks - 0

          Java中可以使用HttpURLConnection來(lái)請(qǐng)求WEB資源。

           

          1、 URL請(qǐng)求的類(lèi)別

          分為二類(lèi),GET與POST請(qǐng)求。二者的區(qū)別在于:
          a:) get請(qǐng)求可以獲取靜態(tài)頁(yè)面,也可以把參數(shù)放在URL字串后面,傳遞給servlet,

          b:) post與get的不同之處在于post的參數(shù)不是放在URL字串里面,而是放在http請(qǐng)求的正文內(nèi)。

           

           

          2、URLConnection的對(duì)象問(wèn)題

          1. URL url = new URL("http://localhost:8080/TestHttpURLConnectionPro.do");  
          2.   
          3. URLConnection rulConnection = url.openConnection();// 此處的urlConnection對(duì)象實(shí)際上是根據(jù)URL的  
          4.           // 請(qǐng)求協(xié)議(此處是http)生成的URLConnection類(lèi)  
          5.           // 的子類(lèi)HttpURLConnection,故此處最好將其轉(zhuǎn)化  
          6.           // 為HttpURLConnection類(lèi)型的對(duì)象,以便用到  
          7.           // HttpURLConnection更多的API.如下:  
          8.   
          9. HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection; 
          3、HttpURLConnection對(duì)象參數(shù)問(wèn)題
          1. // 設(shè)置是否向httpUrlConnection輸出,因?yàn)檫@個(gè)是post請(qǐng)求,參數(shù)要放在  
          2. // http正文內(nèi),因此需要設(shè)為true, 默認(rèn)情況下是false;  
          3. httpUrlConnection.setDoOutput(true);  
          4.   
          5. // 設(shè)置是否從httpUrlConnection讀入,默認(rèn)情況下是true;  
          6. httpUrlConnection.setDoInput(true);  
          7.   
          8. // Post 請(qǐng)求不能使用緩存  
          9. httpUrlConnection.setUseCaches(false);  
          10.   
          11. // 設(shè)定傳送的內(nèi)容類(lèi)型是可序列化的java對(duì)象  
          12. // (如果不設(shè)此項(xiàng),在傳送序列化對(duì)象時(shí),當(dāng)WEB服務(wù)默認(rèn)的不是這種類(lèi)型時(shí)可能拋java.io.EOFException)  
          13. httpUrlConnection.setRequestProperty("Content-type""application/x-java-serialized-object");  
          14.   
          15. // 設(shè)定請(qǐng)求的方法為"POST",默認(rèn)是GET  
          16. httpUrlConnection.setRequestMethod("POST");  
          17.   
          18. // 連接,從上述第2條中url.openConnection()至此的配置必須要在connect之前完成,  
          19.         httpUrlConnection.connect(); 
          4、HttpURLConnection連接問(wèn)題
          1. // 此處getOutputStream會(huì)隱含的進(jìn)行connect(即:如同調(diào)用上面的connect()方法,  
          2. // 所以在開(kāi)發(fā)中不調(diào)用上述的connect()也可以)。  
          3. OutputStream outStrm = httpUrlConnection.getOutputStream();
          5、HttpURLConnection寫(xiě)數(shù)據(jù)與發(fā)送數(shù)據(jù)問(wèn)題
          1. // 現(xiàn)在通過(guò)輸出流對(duì)象構(gòu)建對(duì)象輸出流對(duì)象,以實(shí)現(xiàn)輸出可序列化的對(duì)象。  
          2. ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm);  
          3.   
          4. // 向?qū)ο筝敵隽鲗?xiě)出數(shù)據(jù),這些數(shù)據(jù)將存到內(nèi)存緩沖區(qū)中  
          5. objOutputStrm.writeObject(new String("我是測(cè)試數(shù)據(jù)"));  
          6.   
          7. // 刷新對(duì)象輸出流,將任何字節(jié)都寫(xiě)入潛在的流中(些處為ObjectOutputStream)  
          8. objOutputStm.flush();  
          9.   
          10. // 關(guān)閉流對(duì)象。此時(shí),不能再向?qū)ο筝敵隽鲗?xiě)入任何數(shù)據(jù),先前寫(xiě)入的數(shù)據(jù)存在于內(nèi)存緩沖區(qū)中,  
          11. // 在調(diào)用下邊的getInputStream()函數(shù)時(shí)才把準(zhǔn)備好的http請(qǐng)求正式發(fā)送到服務(wù)器  
          12. objOutputStm.close();  
          13.   
          14. // 調(diào)用HttpURLConnection連接對(duì)象的getInputStream()函數(shù),  
          15. // 將內(nèi)存緩沖區(qū)中封裝好的完整的HTTP請(qǐng)求電文發(fā)送到服務(wù)端。  
          16. InputStream inStrm = httpConn.getInputStream(); // <===注意,實(shí)際發(fā)送請(qǐng)求的代碼段就在這里  
          17.   
          18. // 上邊的httpConn.getInputStream()方法已調(diào)用,本次HTTP請(qǐng)求已結(jié)束,下邊向?qū)ο筝敵隽鞯妮敵鲆褵o(wú)意義,  
          19. // 既使對(duì)象輸出流沒(méi)有調(diào)用close()方法,下邊的操作也不會(huì)向?qū)ο筝敵隽鲗?xiě)入任何數(shù)據(jù).  
          20. // 因此,要重新發(fā)送數(shù)據(jù)時(shí)需要重新創(chuàng)建連接、重新設(shè)參數(shù)、重新創(chuàng)建流對(duì)象、重新寫(xiě)數(shù)據(jù)、  
          21. // 重新發(fā)送數(shù)據(jù)(至于是否不用重新這些操作需要再研究)  
          22. objOutputStm.writeObject(new String(""));  
          23. httpConn.getInputStream(); 
          6、post參數(shù)的方法
          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) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開(kāi)發(fā)網(wǎng) 貨運(yùn)專(zhuān)家
          主站蜘蛛池模板: 扶沟县| 太湖县| 镇江市| 商丘市| 青冈县| 阳山县| 买车| 离岛区| 巴里| 探索| 江达县| 浦北县| 武宣县| 吉水县| 兖州市| 抚顺县| 水富县| 新沂市| 云龙县| 肃宁县| 洞口县| 兴化市| 仁化县| 乌拉特后旗| 兴城市| 汶川县| 武功县| 涿鹿县| 呼伦贝尔市| 商都县| 乌拉特前旗| 临高县| 洛南县| 永昌县| 秦安县| 申扎县| 夏邑县| 苏尼特右旗| 丰原市| 永昌县| 诏安县|