//URLConnection.java
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;public class URLConnectionSample {
public static void main(String[] args) {
//只接受一个命令行参数,这个参数作为URL使用
if (1 != args.length) {
System.err.println("Usage: java URLConnectionSample url");
return;
}
try {
//读取命令行参数,将第一个参数解释为URL
URL url = new URL(args[0]);
// 通过URL对象构造URLConnection对象
URLConnection con = url.openConnection();
//连接到URL
//con.connect();
//输出相关的信息
System.out.println(" Content Type: " + con.getContentType());
System.out.println(" Content Encoding: " + con.getContentEncoding());
System.out.println(" Content Length: " + con.getContentLength());
System.out.println(" Date: " + new Date(con.getDate()));
System.out.println(" Last Modified: " + new Date(con.getLastModified()));
System.out.println(" Expiration: " + new Date(con.getExpiration()));
//如果URL对象的协议被设置为HTTP协议,
//那么返回的URLConnection对象实际上是一个HttpURLConnection对象
//通过使用HTTPURLConnection对象,可以获得一些与HTTP协议相关的
//信息,如状态码
if (con instanceof HttpURLConnection) {
HttpURLConnection h = (HttpURLConnection) con;
System.out.println(" Request Method: " + h.getRequestMethod());
System.out.println(" Response Message: " + h.getResponseMessage());
//返回服务器发回的状态码,如果状态码不是2xx,那么肯定发生了错误
System.out.println(" Response Code: " + h.getResponseCode());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
URLConnection con = url.openConnection();
//连接到URL
//con.connect();
这里调用openConnection后,调不调用connect后,程序运行结果一样,帮助文档上说;
通过在 URL 上调用 openConnection 方法创建连接对象。 
操作设置参数和一般请求属性。 
使用 connect 方法建立到远程对象的实际连接。 
远程对象变为可用。远程对象的头字段和内容变为可访问。
不是很懂,到底调用connect与不调用的 区别;

解决方案 »

  1.   

     connect()方法:
    打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。 
    如果在已打开连接(此时 connected 字段的值为 true)的情况下调用 connect 方法,则忽略该调用。 URLConnection 对象经历两个阶段:首先创建对象,然后建立连接。在创建对象之后,建立连接之前,可指定各种选项(例如,doInput 和 UseCaches)。连接后再进行设置就会发生错误。连接后才能进行的操作(例如 getContentLength),如有必要,将隐式执行连接。