URLConnection調用介面,urlconnection調用
寫在前面:
項目是java web,jdk1.4,weblogic 7;對方.net系統,用wcf開發的介面。對方提供介面url地址,以及說明用post方式去調用,無需傳遞參數,直接返回json array(json數組格式的資料)
調用介面的方法有很多中,架構調用,ajax調用,urlConnection等等.由於項目需要,需要遠程調用對方.net系統的介面,其介面是用wcf開發的,然後我們這邊的系統是java,並且jdk是1.4,所以主流的一些架構調用已經用不了了,一般要jdk1.6以上才可以。說到這裡,axis是可以適用於jdk1.4的,但是當採用用戶端產生代碼的方式的時候,我產生的類有缺少,不知道為啥,果斷放棄;然後由於是跨域調用介面(也就是雙方的系統不在一個伺服器裡面),並且需要post方式去訪問,故ajax的方式也不行,因為ajax不支援跨域,當然利用jsonp是可以跨域的,但是它是採用get方式訪問的。在掙紮嘗試了兩三天后,求助貼吧大神,大神跟我語音,讓我用httpurlconnection的方式去訪問,也就是URLConnection調用介面。之後,我又拿出了傳智播客的webservice的視頻筆記,上面也有提及到採用URLConnection調用介面,於是我就打算試試。成功啦......真是強大哈。。。(貌似這種方式可以適用於各種介面的調用,也可以調用webservice,大家都可以試一試,遇到問題不要怕,啊哈哈哈。。。。。)
1.準備工作:
對於URLConnection調用介面貌似不需要匯入任何相關的jar包,這個要根據項目來定。這裡返回的是json數組的字串,所以這裡我要用到json相關的jar來進行擷取。匯入json的jar包就可以了。
代碼:可以自己先寫一個main java程式來串連測試一下,然後再放到具體的項目上去進行調用。
public static void main(String[] args) { //建立url地址 這裡的url地址我是亂寫的 你們填寫自己的需要調用的介面就好 URL url = new URL("http://10.10.10.83/GetProjectNameService/GetProjectNameService.svc/getProjectName"); //開啟串連 URLConnection conn = url.openConnection(); //轉換成HttpURL HttpURLConnection httpConn = (HttpURLConnection) conn; //連線逾時的相關設定 看相關部落格說要加上 就沒有去掉 System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); System.setProperty("sun.net.client.defaultReadTimeout", "30000"); //開啟輸入輸出的開關 httpConn.setDoInput(true); httpConn.setDoOutput(true); //post提交不能有緩衝 httpConn.setUseCaches(false); //設定傳送的內容類型是可序列化的java對象 如果不需要傳遞參數 就不需要寫就行了 //httpConn.setRequestProperty("Content-type", "application/x-java-serialized-object"); //httpConn.setRequestProperty("Content-type", "UTF-8"); //佈建要求的頭資訊 這裡的請求類型是根據自己需要傳遞的參數來決定的 //httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8"); //佈建要求方式 httpConn.setRequestMethod("POST"); //獲得輸出資料流 OutputStream out = httpConn.getOutputStream(); //發送資料 即使什麼參數也不用傳遞 也要發送資料 穿空的字串就好了 ObjectOutputStream objOut = new ObjectOutputStream(out); objOut.writeObject(new String("")); objOut.flush(); objOut.close(); //獲得輸入資料流 在這裡獲得輸入資料流的時候 就已經預設執行了connect()方法 故上一步可以省略這個方法 InputStream in = httpConn.getInputStream(); //判斷請求成功 StringBuffer sb = new StringBuffer(); JSONArray jarr = null; String str = ""; if(httpConn.getResponseCode() == 200){
//使用輸入資料流的緩衝區 這裡加入UTF-8可以解決亂碼的問題 BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8")); String line = null; //讀取輸入資料流 while((line = reader.readLine()) != null){ sb.append(line); } str = sb.toString(); System.out.println("返回結果:"+str); //由於對方返回的結果是json數組格式的字串 故將json數組格式的字串轉為json數組 //可根據自己項目的需要來轉為需要的類型 具體方法 可以百度 jarr = new JSONArray(str); //遍曆列印 for(int i=0;i<jarr.length();i++){ System.out.println(jarr.getString(i)); }} }