Java
中可以使用
HttpURLConnection
来请求
WEB
资源。
HttpURLConnection
对象不能直接构造,需要通过
URL.openConnection()
来获得
HttpURLConnection
对象,示例代码如下:
String szUrl = "http://www.ee2ee.com/";
URL url = new URL(szUrl);
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
HttpURLConnection
是基于
HTTP
协议的,其底层通过
socket
通信实现。如果不设置超时(
timeout
),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时:
System.setProperty("sun.net.client.defaultConnectTimeout",
超时毫秒数字符串
);
System.setProperty("sun.net.client.defaultReadTimeout",
超时毫秒数字符串
);
其中:
sun.net.client.defaultConnectTimeout
:连接主机的超时时间(单位:毫秒)
sun.net.client.defaultReadTimeout
:从主机读取数据的超时时间(单位:毫秒)
例如:
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000");
JDK 1.5
以前的版本,只能通过设置这两个系统属性来控制网络超时。在
1.5
中,还可以使用
HttpURLConnection
的父类
URLConnection
的以下两个方法:
setConnectTimeout
:设置连接主机超时(单位:毫秒)
setReadTimeout
:设置从主机读取数据超时(单位:毫秒)
例如:
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
urlCon.setConnectTimeout(30000);
urlCon.setReadTimeout(30000);
需要注意的是,笔者在
JDK1.4.2
环境下,发现在设置了
defaultReadTimeout
的情况下,如果发生网络超时,
HttpURLConnection
会自动重新提交一次请求,出现一次请求调用,请求服务器两次的问题(
Trouble
)
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
http://www.iteye.com/topic/179241