2011年5月25日 星期三

用java.net.URL建立連線注意事項

java.net.URL是java內建的類別
能幫助程式去取得網路上的資源
以http封包發送request封包給站台
再從站台收到response

今天在測試時
發現你使用此類別建立連線
URL的openConnection()會回傳一個URLConnection物件
該物件一直都不會送出request封包
直到你呼叫他的getHeaderField()或getInputStream()等getter方法
才會送出request封包

我嚐試如果都不用getter方法
用connect()方法也是不行
可能是因為該方法是抽象的abstract
然後URL的openConnection()方法所回傳的URLConnection實作物件
(呼叫該物件的.getClass().getName方法, 得知是個HttpURLConnection類別的物件)
又沒有覆寫該方法所致

所以我剛去看了一下JAVA API
發現URLConnection本身是個abstract class
abstract class的意思是有些方法可以沒有身體
(interface的話就全部都不能有身體)
而繼承他的HttpURLConnection也是個abstract class
並且真的沒有加以定義connect()

所以要是你想要用java.net.URL
讓你的程式和網路上的資源取得連線
呼叫connect()方法是沒用的, 他目前還是個空殼
(或許以後版本的java會為他填一些內容)
記得要呼叫URLConnection類別的getter方法
這樣才會真的把request封包送出去!!

沒有留言:

張貼留言