HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时:
System.setProperty("sun.net.client.defaultConnectTimeout", 超时毫秒数字符串);
System.setProperty("sun.net.client.defaultReadTimeout", 超时毫秒数字符串);
其中: sun.net.client.defaultConnectTimeout:连接主机的超时时间(单位:毫秒)
sun.net.client.defaultReadTimeout:从主机读取数据的超时时间(单位:毫秒)
URL url = new URL("http://localhost:8080/TestHttpURLConnectionPro/index.jsp");
URLConnection rulConnection = url.openConnection();// 此处的urlConnection对象实际上是根据URL的
// 请求协议(此处是http)生成的URLConnection类
// 为HttpURLConnection类型的对象,以便用到
HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection;
HttpURLConnection对象参数问题
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165739649-1847475903.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165739899-589274044.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165740227-1073909210.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165740446-1784649519.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165740680-1738299124.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165740914-1881553200.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165741164-649307329.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165741383-1570119574.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165741727-1875373770.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165742258-549590688.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165742743-1119818200.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165743180-951566837.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165743821-1096143585.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165744086-2055184999.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165744477-997531525.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165744868-798561690.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165745555-1270932796.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165746071-2127114513.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165746305-1451728824.png)
HttpURLConnection连接问题:
OutputStream outStrm = httpUrlConnection.getOutputStream();
HttpURLConnection写数据与发送数据问题:
// 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。
ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm);
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165748758-1465320346.png)
// 向对象输出流写出数据,这些数据将存到内存缓冲区中
objOutputStrm.writeObject(new String("我是测试数据"));
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165749399-510379599.png)
// 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream)
objOutputStm.flush();
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165750196-114188206.png)
// 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中,
// 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器
objOutputStm.close();
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165753649-633550757.png)
// 调用HttpURLConnection连接对象的getInputStream()函数,
// 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。
InputStream inStrm = httpConn.getInputStream(); // <===注意,实际发送请求的代码段就在这里
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165754774-1971193691.png)
// 上边的httpConn.getInputStream()方法已调用,本次HTTP请求已结束,下边向对象输出流的输出已无意义,
// 既使对象输出流没有调用close()方法,下边的操作也不会向对象输出流写入任何数据.
// 因此,要重新发送数据时需要重新创建连接、重新设参数、重新创建流对象、重新写数据、
// 重新发送数据(至于是否不用重新这些操作需要再研究)
objOutputStm.writeObject(new String(""));
httpConn.getInputStream();
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165748493-363006805.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165748758-1465320346.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165748961-416966702.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165749196-1777828607.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165749399-510379599.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165749602-740641304.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165749883-325429274.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165750196-114188206.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165750602-1350297042.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165751633-1575607617.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165753430-1946655324.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165753649-633550757.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165753961-1105896672.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165754180-2062005185.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165754399-153525742.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165754774-1971193691.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165754993-122349103.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165755274-1874235664.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165755477-1091611537.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165755743-1532231856.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165755930-270123697.png)
![](https://images2015.cnblogs.com/blog/1040703/201706/1040703-20170603165756414-1361286154.png)