public final class URL extends Object implements Serializable
URL表示统一资源定位符,指向万维网上的“资源”的指针。
资源可以像文件或目录一样简单,或者可以是对更复杂的对象的引用,例如对数据库或搜索引擎的查询。
有关URL类型及其格式的更多信息,请访问: Types of URL
一般来说,URL可以分为几个部分。 请考虑以下示例:
http://www.example.com/docs/resource1.html
上面的URL表示要使用的协议是http (超文本传输协议),并且信息驻留在名为www.example.com的主机上。 该主机上的信息名为/docs/resource1.html 。 主机上此名称的确切含义取决于协议和主机。 信息通常驻留在一个文件中,但它可以在飞行中生成。 该URL的这个组件称为路径组件。
URL可以选择指定一个“端口”,它是在远程主机上进行TCP连接的端口号。 如果未指定端口,则使用协议的默认端口。 例如, http的默认端口是80 。 另一个端口可以指定为:
http://www.example.com:1080/docs/resource1.html
的语法URL由下式定义RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax ,通过修正RFC 2732: Format for Literal IPv6 Addresses in URLs 。 文字IPv6地址格式也支持scope_ids。 描述了scope_ids的语法和用法here 。
URL可能附加了一个“片段”,也称为“ref”或“reference”。 片段由尖锐的符号字符“#”表示,后跟更多的字符。 例如,
http://java.sun.com/index.html#chapter1
该片段在技术上不是URL的一部分。 相反,它表示在检索到指定的资源之后,应用程序对附有标签chapter1的文档的该部分chapter1 。 标签的含义是资源特定的。
一个应用程序还可以指定一个“相对URL”,它只包含相对于另一个URL访问资源的足够的信息。 HTML页面中经常使用相对URL。 例如,如果URL的内容:
http://java.sun.com/index.html
在其中包含相对URL:
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/ and http://foo.com/hello%20world
将被视为不相等。
注意,在某些情况下, URI类确实执行其组件字段的转义。 管理URL编码和解码的推荐方法是使用URI ,并使用toURI()和URI.toURL()在这两个类之间进行转换。
也可以使用URLEncoder和URLDecoder类,但仅适用于与RFC2396中定义的编码方案不同的HTML表单编码。
| Constructor and Description |
|---|
URL(String spec)
从
String表示形成一个
URL对象。
|
URL(String protocol, String host, int port, String file)
创建
URL从指定对象
protocol ,
host ,
port数,和
file 。
|
URL(String protocol, String host, int port, String file, URLStreamHandler handler)
创建
URL从指定对象
protocol ,
host ,
port数,
file和
handler 。
|
URL(String protocol, String host, String file)
从指定的
protocol名称,
host名称和
file名称创建一个URL。
|
URL(URL context, String spec)
通过在指定的上下文中解析给定的规范来创建一个URL。
|
URL(URL context, String spec, URLStreamHandler handler)
通过在指定上下文中使用指定的处理程序解析给定规范来创建URL。
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
equals(Object obj)
将此URL与其他对象进行比较。
|
String |
getAuthority()
获取此的授权部分
URL 。
|
Object |
getContent()
获取此URL的内容。
|
Object |
getContent(类[] 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引用的远程对象的URL 。
|
URLConnection |
openConnection(Proxy proxy)
与 openConnection()相同,但连接将通过指定的代理进行;
不支持代理的协议处理程序将忽略代理参数并进行正常连接。
|
InputStream |
openStream()
打开与此
URL ,并返回一个
InputStream ,以便从该连接读取。
|
boolean |
sameFile(URL other)
比较两个URL,不包括片段组件。
|
static void |
setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
设置应用程序的
URLStreamHandlerFactory 。
|
String |
toExternalForm()
构造这个
URL的字符串
URL 。
|
String |
toString()
构造此
URL的字符串表示
URL 。
|
URI |
toURI()
|
public URL(String protocol, String host, int port, String file) throws MalformedURLException
URL从指定对象protocol , host , port数,和file 。
host可以表示为主机名或字面IP地址。 如果使用IPv6文字地址,则应包含在方括号( '['和']' )中,如RFC 2732所规定 ; 然而, RFC 2373: IP Version 6 Addressing Architecture中定义的文字IPv6地址格式也被接受。
指定port号-1表明URL应使用的默认端口的协议。
如果这是使用指定的协议创建的第一个URL对象,则会为该协议创建一个流协议处理程序对象,一个类为URLStreamHandler的实例:
URLStreamHandlerFactory作为流处理程序工厂的实例,那么该实例的createURLStreamHandler方法createURLStreamHandler协议字符串作为参数进行调用,以创建流协议处理程序。 URLStreamHandlerFactory ,或者如果工厂的createURLStreamHandler方法返回null ,则构造函数找到系统属性的值:
java.protocol.handler.pkgs
如果该系统属性的值不是null ,则将其解释为由一个垂直斜杠字符“ | ”分隔的包的列表。 构造函数尝试加载名为
<package>.<protocol>.Handler
其中< package >替换为包的名称,并且< protocol >被协议的名称替换。 如果此类不存在,或者类存在但不是URLStreamHandler的子类, URLStreamHandler尝试列表中的下一个包。
<system default package>.<protocol>.Handler
如果该类不存在,或者类存在但不是URLStreamHandler的子类,则抛出一个MalformedURLException 。 以下协议的协议处理程序保证存在于搜索路径上:
http, https, file, and jar
还可以提供附加协议的协议处理程序。
这个构造函数不会对输入进行验证。
protocol - 要使用的协议的名称。
host - 主机的名称。
port - 主机上的端口号。
file - 主机上的文件
MalformedURLException - 如果指定了未知协议。
System.getProperty(java.lang.String) , setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory) , URLStreamHandler , URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)
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)
public URL(String protocol, String host, int port, String file, URLStreamHandler handler) throws MalformedURLException
URL从指定对象protocol , host , port数, file和handler 。
指定port号-1表明URL应使用的默认端口的协议。
指定handler的null表示URL应该使用协议的默认流处理程序,如下所述:java.net.URL#URL(java.lang.String,java.lang.String,int,java.lang.String )
如果处理程序不为空,并且有一个安全管理器,安全管理器的checkPermission方法将被调用NetPermission("specifyStreamHandler")权限。 这可能会导致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
public URL(String spec) throws MalformedURLException
String表示形成一个URL对象。
这个构造函数相当于使用一个null第一个参数调用双参数构造函数。
spec - 要解析为URL的
String 。
MalformedURLException - 如果没有指定协议,或者找不到未知协议,或者
spec是
null 。
URL(java.net.URL, java.lang.String)
public URL(URL context, String spec) throws MalformedURLException
<scheme>://<authority><path>?<query>#<fragment>
引用被解析为方案,权限,路径,查询和片段部分。
如果路径组件为空,并且方案,权限和查询组件未定义,则新URL是对当前文档的引用。
否则,规范中存在的片段和查询部分将用于新的URL。
如果方案组件在给定规范中定义,并且与上下文方案不匹配,则根据规范单独创建新URL作为绝对URL。 否则,方案组件从上下文URL继承。
如果权限组件存在于规范中,则规范被视为绝对的,规范权限和路径将替换上下文权限和路径。 如果规范中缺少权限组件,则新URL的权限将从上下文继承。
如果规范的路径组件以斜杠字符“/”开头,那么该路径将被视为绝对路径,并且规范路径将替换上下文路径。
否则,将路径视为相对路径,并附加到上下文路径,如RFC2396中所述。 此外,在这种情况下,通过删除由“..”和“。”发生的目录更改来规范路径。
有关URL解析的更详细的描述,请参阅RFC2396。
context - 解析规范的上下文。
spec - 要解析为URL的
String 。
MalformedURLException - 如果没有指定协议,或者找不到未知协议,或者
spec是
null 。
URL(java.lang.String, java.lang.String, int, java.lang.String) , URLStreamHandler , URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
public URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException
context - 解析规范的上下文。
spec - 要解析为URL的
String 。
handler - URL的流处理程序。
MalformedURLException - 如果没有指定协议,或者找不到未知协议,或者
spec是
null 。
SecurityException - 如果安全管理器存在,并且其
checkPermission方法不允许指定流处理程序。
URL(java.lang.String, java.lang.String, int, java.lang.String) , URLStreamHandler , URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
public String getQuery()
URL的查询部分。
URL ,或
null如果不存在
public String getPath()
URL的路径部分。
URL的路径部分,或一个空字符串,如果不存在
public String getUserInfo()
URL的userInfo部分。
URL一部分,还是
null如果不存在
public String getAuthority()
URL 。
URL
public int getPort()
URL的端口号。
public int getDefaultPort()
URL的协议的默认端口号。
如果URL方案或URL的URLStreamHandler未定义默认端口号,则返回-1。
public String getProtocol()
URL的协议名称。
URL的协议。
public String getHost()
URL的主机名(如适用)。
主机的格式符合RFC 2732,即对于一个文字的IPv6地址,该方法将返回包含在方括号( '['和']' )中的IPv6地址。
URL 。
public String getFile()
URL的文件名。
返回的文件部分将与getPath()相同,加上值为getQuery() (如果有)。
如果没有查询部分,此方法和getPath()将返回相同的结果。
URL ,如果不存在,则为空字符串
public String getRef()
URL的锚(也称为“参考”)。
URL ,或
null如果不存在
public boolean equals(Object obj)
如果给定的对象不是一个URL,那么这个方法会立即返回false 。
如果两个URL对象具有相同的协议,引用等效主机,主机上具有相同的端口号,以及该文件的相同文件和片段,则它们是相等的。
如果两个主机名都可以解析成相同的IP地址,则两台主机被认为是等效的; 否则如果任一主机名无法解析,主机名必须相等而不考虑大小写; 或两个主机名等于null。
由于主机比较需要名称解析,因此此操作是阻塞操作。
注意: equals的定义行为已知与HTTP中的虚拟主机不一致。
equals在
Object
obj - 要比较的URL。
true如果对象是一样的;
false否则。
Object.hashCode() , HashMap
public int hashCode()
哈希码基于与URL比较相关的所有URL组件。 因此,该操作是阻塞操作。
hashCode在
Object
URL的哈希码。
Object.equals(java.lang.Object) ,
System.identityHashCode(java.lang.Object)
public boolean sameFile(URL other)
返回true如果此URL和other参数是没有考虑片段部分考虑相等。
other - 与
URL进行比较。
true如果他们引用同一个远程对象;
false否则。
public String toString()
URL的字符串表示URL 。
该字符串是通过调用该对象的流协议处理程序的toExternalForm方法创建的。
toString在
Object
URL(java.lang.String, java.lang.String, int, java.lang.String) ,
URLStreamHandler.toExternalForm(java.net.URL)
public String toExternalForm()
URL的字符串表示URL 。
该字符串是通过调用该对象的流协议处理程序的toExternalForm方法创建的。
public URI toURI() throws URISyntaxException
URI 。
在相同的方式,这种方法的功能new URI (this.toString()) 。
请注意,符合RFC 2396的任何URL实例都可以转换为URI。 但是,一些不严格遵守的URL不能转换为URI。
URISyntaxException - 如果此URL严格按照RFC2396进行格式化,不能转换为URI。
public URLConnection openConnection() throws IOException
URLConnection实例,表示与URL引用的远程对象的URL 。
每次当调用此URL的协议处理程序的URLStreamHandler.openConnection(URL)方法时, 都会创建一个新的URLConnection实例。
应该注意的是,URLConnection实例不会在创建时建立实际的网络连接。 这只会在调用URLConnection.connect()时发生。
如果对于URL的协议(如HTTP或JAR),则存在一个属于以下软件包或其子包之一的公共专用URLConnection子类:java.lang,java.io,java.util,java.net,返回的连接将是该子类。 例如,对于HTTP,将返回一个HttpURLConnection,对于JAR,将返回一个JarURLConnection。
URLConnection 。
IOException - 如果发生I / O异常。
URL(java.lang.String, java.lang.String, int, java.lang.String)
public URLConnection openConnection(Proxy proxy) throws IOException
proxy - 将通过该连接进行的代理。
如果需要直接连接,则应指定Proxy.NO_PROXY。
URLConnection的URL。
IOException - 如果发生I / O异常。
SecurityException - 如果存在安全管理员,并且呼叫者没有权限连接到代理。
IllegalArgumentException - 如果代理为空,或者代理的类型不正确,将抛出此异常
UnsupportedOperationException - 如果实现协议处理程序的子类不支持此方法。
URL(java.lang.String, java.lang.String, int, java.lang.String) , URLConnection , URLStreamHandler.openConnection(java.net.URL, java.net.Proxy)
public final InputStream openStream() throws IOException
URL ,并返回一个InputStream用于从该连接读取。
这个方法是一个简写:
openConnection().getInputStream()
IOException - 如果发生I / O异常。
openConnection() ,
URLConnection.getInputStream()
public final Object getContent() throws IOException
openConnection().getContent()
IOException - 如果发生I / O异常。
URLConnection.getContent()
public final Object getContent(类[] classes) throws IOException
openConnection().getContent(Class[])
classes - 一个Java类型的数组
IOException - 如果发生I / O异常。
URLConnection.getContent(Class[])
public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
URLStreamHandlerFactory 。
在给定的Java虚拟机中最多可以调用此方法。
URLStreamHandlerFactory实例用于从协议名称构造流协议处理程序。
如果有安全管理员,则该方法首先调用安全管理器的checkSetFactory方法,以确保允许操作。 这可能会导致SecurityException。
fac - 所需的工厂。
Error - 如果应用程序已经设置了工厂。
SecurityException - 如果安全管理器存在,并且其
checkSetFactory方法不允许操作。
URL(java.lang.String, java.lang.String, int, java.lang.String) , URLStreamHandlerFactory , SecurityManager.checkSetFactory()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.