|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.net
类 URL
java.lang.Object java.net.URL
- 所有已实现的接口:
- Serializable
-
public final class URL
- extends Object
- implements Serializable
类 URL
代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。有关 URL 的类型和格式的更多信息,可从以下位置找到:
http://archive.ncsa.uiuc.edu/SDG/Software/Mosaic/Demo/url-primer.html
通常,URL 可分成几个部分。上面的 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
的语法由此文档定义:RFC 2396:Uniform Resource Identifiers (URI):Generic Syntax;在此文件中对其内容又进行了修正:RFC 2732:Format for Literal IPv6 Addresses in URLs。字面值 IPv6 地址格式还支持 scope_id。scope_id 的语法和用法在此处进行了描述。
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 中继承。但是,必须指定文件部分。可选的片段部分不继承。
URL 类自身并不根据 RFC2396 中定义的转义机制编码或解码任何 URL 部分。由调用方对任何需要在调用 URL 前进行转义的字段进行编码,并对从 URL 返回的任何经过转义的字段进行解码。进一步而言,由于 URL 不懂 URL 转义,所以它不会识别同一 URL 的对等编码和解码形式。例如,对于这两个 URL:
http://foo.com/hello world/ 和 http://foo.com/hello%20world将被视为互不相等。
注意,URI
类在某些特定情况下对其组成字段执行转义。建议使用 URI
管理 URL 的编码和解码,并使用 toURI()
和 URI.toURL()
实现这两个类之间的转换。
也可以使用 URLEncoder
和 URLDecoder
类,但是只适用于 HTML 形式的编码,它与 RFC2396 中定义的编码机制不同。
- 从以下版本开始:
- JDK1.0
- 另请参见:
- 序列化表格
构造方法摘要 | |
---|---|
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。 |
方法摘要 | |
---|---|
boolean |
equals(Object obj) 比较此 URL 是否等于另一个对象。 |
String |
getAuthority() 获得此 URL 的授权部分。 |
Object |
getContent() 获得此 URL 的内容。 |
Object |
getContent(Class[] classes) 获得此 URL 的内容。 |
int |
getDefaultPort() 获得与此 URL 关联协议的默认端口号。 |
String |
getFile() 获得此 URL 的文件名。 |
String |
getHost() 获得此 URL 的主机名(如果适用)。 |
String |
getPath() 获得此 URL 的路径部分。 |
int |
getPort() 获得此 URL 的端口号。 |
String |
getProtocol() 获得此 URL 的协议名称。 |
String |
getQuery() 获得此 URL 的查询部分。 |
String |
getRef() 获得此 URL 的锚点(也称为“引用”)。 |
String |
getUserInfo() 获得此 URL 的 userInfo 部分。 |
int |
hashCode() 创建一个适合哈希表索引的整数。 |
URLConnection |
openConnection() 返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。 |
URLConnection |
openConnection(Proxy proxy) 与 openConnection() 类似,所不同是连接通过指定的代理建立;不支持代理方式的协议处理程序将忽略该代理参数并建立正常的连接。 |
InputStream |
openStream() 打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream 。 |
boolean |
sameFile(URL other) 比较两个 URL,不包括片段部分。 |
protected void |
set(String protocol, String host, int port, String file, String ref) 设置 URL 的字段。 |
protected void |
set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref) 设置 URL 的指定的 8 个字段。 |
static void |
setURLStreamHandlerFactory(URLStreamHandlerFactory fac) 设置应用程序的 URLStreamHandlerFactory 。 |
String |
toExternalForm() 构造此 URL 的字符串表示形式。 |
String |
toString() 构造此 URL 的字符串表示形式。 |
URI |
toURI() 返回与此 URL 等效的 URI 。 |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
URL
public URL(String protocol, String host, int port, String file) throws MalformedURLException
-
根据指定
protocol
、host
、port
号和file
创建URL
对象。host
可用主机名或字面值 IP 地址表示。如果使用 IPv6 字面值地址,则应将其括在方括号('[' 和 ']')中,如 RFC 2732 中指定的那样;但是,在以下文档中定义的字面值 IPv6 地址格式也可以接受:RFC 2373:IP Version 6 Addressing Architecture。指定
port
号为-1
指示 URL 应使用协议的默认端口。如果这是用指定协议创建的第一个 URL 对象,则还会为该协议创建一个流协议处理程序 对象(类
URLStreamHandler
的一个实例):- 如果该应用程序已经预先设置了一个
URLStreamHandlerFactory
的实例作为流处理程序工厂,则将调用该实例的createURLStreamHandler
方法(协议字符串为其中的一个参数)以创建流协议处理程序。 - 如果尚未建立
URLStreamHandlerFactory
,或者该工厂的createURLStreamHandler
方法返回null
,则该构造方法将查找如下系统属性的值:java.protocol.handler.pkgs
null
,则它被转换为一个由垂直线字符 '|
'分隔的包列表。构造方法尝试加载如下名称的类:<package>.<protocol>.Handler
URLStreamHandler
的子类,则尝试列表中的下一个包。 - 如果上面的步骤中未找到协议处理程序,则构造方法将尝试从系统默认包加载。
<system default package>.<protocol>.Handler
URLStreamHandler
的子类,则抛出MalformedURLException
。
应确保搜索路径中包含以下协议的协议处理程序:
http、https、ftp、file 和 jar
此构造方法不执行对输入的验证。
- 参数:
-
protocol
- 要使用的协议名称。 -
host
- 主机名称。 -
port
- 主机端口号。 -
file
- 主机上的文件 - 抛出:
-
MalformedURLException
- 如果指定了未知协议。 - 另请参见:
-
System.getProperty(java.lang.String)
,setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory)
,URLStreamHandler
,URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)
- 如果该应用程序已经预先设置了一个
URL
public URL(String protocol, String host, String file) throws MalformedURLException
-
根据指定的
protocol
名称、host
名称和file
名称创建 URL。使用指定协议的默认端口。此方法等同于调用带四个参数的构造方法,四个参数为
protocol
、host
、-1
和file
。 此构造方法不执行对输入的验证。- 参数:
-
protocol
- 要使用的协议名称。 -
host
- 主机名称。 -
file
- 主机上的文件。 - 抛出:
-
MalformedURLException
- 如果指定了未知协议。 - 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
URL
public URL(String protocol, String host, int port, String file, URLStreamHandler handler) throws MalformedURLException
-
根据指定的
protocol
、host
、port
号、file
和handler
创建URL
对象。指定port
号为-1
指示 URL 应使用协议的默认端口。指定handler
为null
指示 URL 应使用协议的默认流处理程序,大致如下:java.net.URL#URL(java.lang.String, java.lang.String, int, java.lang.String)如果处理程序为非 null,并且有安全管理器,则使用
NetPermission("specifyStreamHandler")
权限调用安全管理器的checkPermission
方法。结果可能是一个 SecurityException 异常。 此构造方法不执行对输入的验证。- 参数:
-
protocol
- 要使用的协议名称。 -
host
- 主机名称。 -
port
- 主机端口号。 -
file
- 主机上的文件 -
handler
- URL 的流处理程序。 - 抛出:
-
MalformedURLException
- 如果指定了未知协议。 -
SecurityException
- 如果安全管理器存在并且其checkPermission
方法不允许显式指定流处理程序。 - 另请参见:
-
System.getProperty(java.lang.String)
,setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory)
,URLStreamHandler
,URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)
,SecurityManager.checkPermission(java.security.Permission)
,NetPermission
URL
public URL(String spec) throws MalformedURLException
-
根据
String
表示形式创建URL
对象。此构造方法等同于调用两个参数的构造方法,其中,第一个参数为
null
。- 参数:
-
spec
- 将作为 URL 解析的String
。 - 抛出:
-
MalformedURLException
- 如果字符串指定未知协议。 - 另请参见:
-
URL(java.net.URL, java.lang.String)
URL
public URL(URL context, String spec) throws MalformedURLException
-
通过在指定的上下文中对给定的 spec 进行解析创建 URL。 新的 URL 从给定的上下文 URL 和 spec 参数创建,这在以下文档中进行了描述:RFC2396 "Uniform Resource Identifiers : Generic * Syntax":
<scheme>://<authority><path>?<query>#<fragment>
如果给定的 spec 中定义了方案部分,但与上下文的方案不匹配,则只根据 spec 创建新的绝对 URL。否则,方案部分从上下文 URL 继承。
如果 spec 中有授权部分,则将该 spec 视为绝对的,并用 spec 的授权和路径替换上下文授权和路径。如果 spec 中没有授权部分,则新的 URL 的授权将从上下文继承。
如果 spec 的路径部分以斜线字符 "/" 开始,则将该路径视为绝对的,并用 spec 的路径替换上下文路径。
否则,如 RFC2396 中所述,该路径将被视为相对路径,并被添加到上下文路径中。此外,在这种情况下,还将通过删除由 ".." 和 "." 产生的目录更改对路径进行规范化处理。
有关 URL 解析的更详细的描述,请参考 RFC2396。
- 参数:
-
context
- 要在其中解析规范的上下文。 -
spec
- 将作为 URL 解析的String
。 - 抛出:
-
MalformedURLException
- 如果未指定任何协议,或者找到了未知协议。 - 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
,URLStreamHandler
,URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
URL
public URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException
-
通过在指定的上下文中用指定的处理程序对给定的 spec 进行解析来创建 URL。如果处理程序为 null,则使用两参数构造方法进行解析。
- 参数:
-
context
- 要在其中解析规范的上下文。 -
spec
- 将作为 URL 解析的String
。 -
handler
- URL 的流处理程序。 - 抛出:
-
MalformedURLException
- 如果未指定任何协议,或者找到了未知协议。 -
SecurityException
- 如果安全管理器存在并且其checkPermission
方法不允许指定流处理程序。 - 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
,URLStreamHandler
,URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
方法详细信息 |
---|
set
protected void set(String protocol, String host, int port, String file, String ref)
- 设置 URL 的字段。这不是一个公共方法,所以只有 URLStreamHandler 才能修改 URL 字段。其他情况下,URL 为常量。
-
-
- 参数:
-
protocol
- 要使用的协议名称 -
host
- 主机名称 -
port
- 主机端口号 -
file
- 主机上的文件 -
ref
- URL 中的内部引用
set
protected void set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref)
- 设置 URL 的指定的 8 个字段。这不是一个公共方法,所以只有 URLStreamHandler 才能修改 URL 字段。其他情况下,URL 为常量。
-
-
- 参数:
-
protocol
- 要使用的协议名称 -
host
- 主机名称 -
port
- 主机上的端口号 -
authority
- url 的授权部分 -
userInfo
- 用户名和密码 -
path
- 主机上的文件 -
ref
- URL 中的内部引用 -
query
- 此 URL 的查询部分 - 从以下版本开始:
- 1.3