1、先简单介绍URL:
public final class URL extends Object implements Serializable
类 URL
代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
通常,URL 可分成几个部分。
http://archive.ncsa.uiuc.edu/SDG/Software/Mosaic/Demo/url-primer.html
上面的 URL 示例指示使用的协议为 http
(超文本传输协议),并且该信息驻留在名为 www.ncsa.uiuc.edu
的主机上。主机上的信息名称为 /SDG/Software/Mosaic/Demo/url-primer.html
。主机上此名称的准确含义取决于协议和主机。该信息一般存储在文件中,但可以随时生成。该 URL 的这一部分称为路径 部分。
URL 可选择指定一个“端口”,用于建立到远程主机 TCP 连接的端口号。如果未指定该端口号,则使用协议默认的端口。例如,http
协议的默认端口为 80
。还可以指定一个备用端口,如下所示:
http://archive.ncsa.uiuc.edu:80/SDG/Software/Mosaic/Demo/url-primer.html
URL 后面可能还跟有一个“片段”,也称为“引用”。该片段由井字符 "#" 指示,后面跟有更多的字符。例如,
http://java.sun.com/index.html#chapter1
从技术角度来讲,URL 并不需要包含此片段。但是,使用此片段的目的在于表明,在检索到指定的资源后,应用程序需要使用文档中附加有 chapter1
标记的部分。标记的含义特定于资源。
应用程序也可以指定一个“相对 URL”,它只包含到达相对于另一个 URL 的资源的足够信息。HTML 页面中经常使用相对 URL。例如,假设 URL 的内容是:
其中包含的相对 URL:http://java.sun.com/index.html
为以下形式的缩写:FAQ.html
http://java.sun.com/FAQ.html
相对 URL 不需要指定 URL 的所有组成部分。如果缺少协议、主机名称或端口号,这些值将从完整指定的 URL 中继承。但是,必须指定文件部分。可选的片段部分不继承。
2、URL使用
URL使用分为两个步骤:构造URL对象、打开连接。
2.1 构造。可使用多钟方法构造URL对象,如下表所示。
构造方法摘要 | |
---|---|
URL(String spec) 根据 String 表示形式创建 URL 对象。 | |
URL(String protocol, String host, int port, String file) 根据指定 protocol 、host 、port 号和 file 创建 URL 对象。 | |
URL(String protocol, String host, int port, String file, URLStreamHandler handler) 根据指定的 protocol 、host 、port 号、file 和 handler 创建 URL 对象。 | |
URL(String protocol, String host, String file) 根据指定的 protocol 名称、host 名称和 file 名称创建 URL。 | |
URL(URL context, String spec) 通过在指定的上下文中对给定的 spec 进行解析创建 URL。 | |
URL(URL context, String spec, URLStreamHandler handler) 通过在指定的上下文中用指定的处理程序对给定的 spec 进行解析来创建 URL。 |
eg:
URL url = new URL(“http://www.mycompany.com:8080/index.html”);
其中:使用的协议是http,主机名称是www.mycompany.com,端口号码为8080,文件/资源为index.html
2.2 连接
创建成功后,就可以打开连接来对URL的资源进行访问。有多种方式实现:
URL url = new URL("http://www.sina.com.cn");
2.2.1 通过URLConnection对象
URLConnection urlcon = url.openConnection();
InputStream is = urlcon.getInputStream();
2.2.2 通过HttpURLConnection 对象
HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();
InputStream is = urlcon.getInputStream();
2.2.3 直接使用InputStream.openStream方法
InputStream is = url.openStream();