HTTP協議時Internet上使用的很多也很重要的一個協議,越來越多的java應用程序需要通過HTTP協議來訪問網絡資源。 HTTPClient提供的主要功能: 1、實現了所有HTTP的方法(GET、POST、等PUT、HEAD); 2、支持自動轉向; 3、支持HTTPS協議; 4、支持代理服務器等。 使用HttpClient需要以下6個步驟: 創建HttpClient的實例 創建某種連接方法的實例,GetMethod/PostMethod。在 GetMethod/PostMethod的構造函數中傳入待連接的地址 調用第一步中創建好的實例的 execute 方法來執行第二步中創建好的 method 實例 讀response 釋放連接。無論執行方法是否成功,都必須釋放連接 對得到后的內容進行處理
RestTemplate是Spring提供的用於訪問Rest服務的客戶端,RestTemplate提供了多種便捷訪問遠程Http服務的方法,
能夠大大提高客戶端的編寫效率。調用RestTemplate的默認構造函數,RestTemplate對象在底層通過使用java.net包下的實現創建HTTP 請求,
可以通過使用ClientHttpRequestFactory指定不同的HTTP請求方式。 ClientHttpRequestFactory接口主要提供了兩種實現方式,
一種是SimpleClientHttpRequestFactory,使用J2SE提供的方式(既java.net包提供的方式)創建底層的Http請求連接,
還有一種方式是使用HttpComponentsClientHttpRequestFactory方式,底層使用HttpClient訪問遠程的Http服務,使用HttpClient可以配置連接池和證書等信息
URLConnection是個抽象類,它有兩個直接子類分別是HttpURLConnection和JarURLConnection。另外一個重要的類是URL,
通常URL可以通過傳給構造器一個String類型的參數來生成一個指向特定地址的URL實例。每個HttpURLConnection實例都可用於生成單個請求,
但是其他實例可以透明地共享連接到HTTP服務器的基礎網絡。請求后在HttpURLConnection的InputStream或OutputStream上調用close()方法可以釋放與此實例關聯的網絡資源,
但對共享的持久連接沒有任何影響。如果在調用disconnect()時持久連接空閑,則可能關閉基礎套接字。 任何網絡連接都需要經過socket才能連接,HttpURLConnection不需要設置socket,
所以,HttpURLConnection並不是底層的連接,而是在底層連接上的一個請求。
這就是為什么HttpURLConneciton只是一個抽象類,自身不能被實例化的原因。
HttpURLConnection只能通過URL.openConnection()方法創建具體的實例。 雖然底層的網絡連接可以被多個HttpURLConnection實例共享,但每一個HttpURLConnection實例只能發送一個請求。請求結束之后,應該調用HttpURLConnection實例的InputStream或OutputStream的close()方法以釋放請求的網絡資源,不過這種方式對於持久化連接沒用。對於持久化連接,得用disconnect()方法關閉底層連接的socket。