通訊連接。程序能夠經過URLConnection實例向該URL發送請求、讀取URL引用的資源。併發
一般建立一個和 URL的鏈接,併發送請求、讀取此URL引用的資源須要以下幾個步驟:jsp
經過調用URL對象openConnection()方法來建立URLConnection對象。測試
設置URLConnection的參數和普通請求屬性。url
若是隻是發送GET方式請求,使用connect方法創建和遠程資源之間的實際鏈接便可;若是須要發送POST方式的請求,須要獲取URLConnection實例對應的輸出流來發送請求參數。spa
遠程資源變爲可用,程序能夠訪問遠程資源的頭字段或經過輸入流讀取遠程資源的數據。code
在創建和遠程資源的實際鏈接以前,程序能夠經過以下方法來設置請求頭字段:對象
setAllowUserInteraction:設置該URLConnection的allowUserInteraction請求頭字段的值。
setDoInput:設置該URLConnection的doInput請求頭字段的值。
setDoOutput:設置該URLConnection的doOutput請求頭字段的值。
setIfModifiedSince:設置該URLConnection的ifModifiedSince請求頭字段的值。
setUseCaches:設置該URLConnection的useCaches請求頭字段的值。blog
除此以外,還可使用以下方法來設置或增長通用頭字段:資源
setRequestProperty(String key, String value):設置該URLConnection的key請求頭字段的值爲value。以下代碼所示:字符串
public static String sendGet(String url , String param) { String result = ""; BufferedReader in = null; try { String urlName = url + "?" + param; URL realUrl = new URL(urlName); //打開和URL之間的鏈接 URLConnection conn = realUrl.openConnection(); //設置通用的請求屬性 conn.setRequestProperty("accept", "* public static String sendPost(String url,String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); //打開和URL之間的鏈接 URLConnection conn = realUrl.openConnection(); //設置通用的請求屬性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); //發送POST請求必須設置以下兩行 conn.setDoOutput(true); conn.setDoInput(true); //獲取URLConnection對象對應的輸出流 out = new PrintWriter(conn.getOutputStream()); //發送請求參數 out.print(param); //flush輸出流的緩衝 out.flush(); //定義BufferedReader輸入流來讀取URL的響應 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine())!= null) { result += "\n" + line; } } catch(Exception e) { System.out.println("發送POST請求出現異常!" + e); e.printStackTrace(); } //使用finally塊來關閉輸出流、輸入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } //提供主方法,測試發送GET請求和POST請求 public static void main(String args[]) { //發送GET請求 String s = TestGetPost.sendGet("http://localhost:8888/abc/ login.jsp",null); System.out.println(s); //發送POST請求 String s1 = TestGetPost.sendPost("http://localhost:8888/abc/a.jsp", "user=李剛&pass=abc"); System.out.println(s1); } }
上面程序中發送GET請求時只需將請求參數放在URL字符串以後,以?隔開,程序直接調用URLConnection對象的connect方法便可,如程序中sendGet方法中粗體字代碼所示;若是程序須要發送POST請求,則須要先設置doIn和doOut兩個請求頭字段的值,再使用URLConnection對應的輸出流來發送請求參數便可,如程序中sendPost()方法中粗體字代碼所示。無論是發送GET請求,仍是發送POST請求,程序獲取URLConnection響應的方式徹底同樣:若是程序能夠肯定遠程響應是字符流,則可使用字符流來讀取;若是程序沒法肯定遠程響應是字符流,則使用字節流讀取便可。