- java.lang.Object
-
- java.net.URL
-
- All Implemented Interfaces:
-
Serializable
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
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
类,但仅适用于HTML格式编码,这与RFC2396中定义的编码方案不同。- 从以下版本开始:
- 1.0
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 Constructor 描述 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 方法 描述 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,不包括片段组件。static void
setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
设置应用程序的URLStreamHandlerFactory
。String
toExternalForm()
构造此URL
的字符串表示URL
。String
toString()
构造一个URL
的字符串表示URL
。URI
toURI()
返回相当于此URL的URI
。
-
-
-
构造方法详细信息
-
URL
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
方法将以协议字符串作为参数来调用,以创建流协议处理程序。 - 如果尚未设置
URLStreamHandlerFactory
,或者如果工厂的createURLStreamHandler
方法返回null
,则使用ServiceLoader机制来使用系统类加载器来定位URLStreamHandlerProvider实现。 提供者所在的顺序是具体的实现,并且实现可以自由缓存定位的提供者。 一个ServiceConfigurationError ,Error
或者RuntimeException
从抛出createURLStreamHandler
,如果遇到,将传播到调用线程。 每个提供者的createURLStreamHandler
方法(如果已实例化)都使用协议字符串进行调用,直到提供程序返回非空,或者所有提供程序都已用尽。 - 如果上一步无法找到协议处理程序,构造函数将读取系统属性的值:
java.protocol.handler.pkgs
null
,它将被解释为由一个垂直斜杠字符'|
'分隔的包的列表。 构造函数尝试加载名为<package>.<protocol>.Handler
<package>
被替换为包的名称,而<protocol>
被替换为协议的名称。 如果此类不存在,或者类存在但不是URLStreamHandler
的子类,URLStreamHandler
尝试列表中的下一个包。 - 如果上一步无法找到协议处理程序,则构造函数尝试加载内置的协议处理程序。 如果此类不存在,或者类存在但不是
URLStreamHandler
的子类,则抛出一个MalformedURLException
。
以下协议的协议处理程序保证存在于搜索路径上:
http, https, file, and jar
这个构造函数不会对输入进行验证。
- 参数
-
protocol
- 要使用的协议的名称。 -
host
- 主机的名称。 -
port
- 主机上的端口号。 -
file
- 主机上的文件 - 异常
-
MalformedURLException
- 如果未知协议或端口为-1以外的负数 - 另请参见:
-
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
- 主机的名称。 -
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
创建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
- 如果未知协议或端口为-1以外的负数 -
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
- 如果未指定协议或未找到协议,或者spec
为null
,或者解析的URL不符合相关协议的具体语法。 - 另请参见:
-
URL(java.net.URL, java.lang.String)
-
URL
public URL(URL context, String spec) throws MalformedURLException
通过在指定的上下文中解析给定的规范来创建一个URL。 新URL是根据RFC2396“统一资源标识符:通用*语法”中描述的给定上下文URL和规范参数创建的:<scheme>://<authority><path>?<query>#<fragment>
如果方案组件在给定规范中定义,并且与上下文方案不匹配,则根据规范单独创建新URL作为绝对URL。 否则,方案组件从上下文URL继承。
如果权限组件存在于规范中,则规范被视为绝对的,规范权限和路径将替换上下文权限和路径。 如果规范中缺少权限组件,则新URL的权限将从上下文继承。
如果规范的路径组件以斜杠字符“/”开头,那么该路径将被视为绝对路径,并且规范路径将替换上下文路径。
否则,将路径视为相对路径,并附加到上下文路径,如RFC2396中所述。 此外,在这种情况下,通过删除由“..”和“。”发生的目录更改来规范路径。
有关URL解析的更详细的描述,请参阅RFC2396。
- 参数
-
context
- 解析规范的上下文。 -
spec
- 要解析为URL的String
。 - 异常
-
MalformedURLException
- 如果未指定协议或未找到协议,或者spec
为null
,或者解析的URL不符合相关协议的具体语法。 - 另请参见:
-
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
通过在指定上下文中使用指定的处理程序解析给定规范来创建URL。 如果处理程序为空,则解析与两个参数构造函数一样发生。- 参数
-
context
- 解析规范的上下文。 -
spec
- 要解析为URL的String
。 -
handler
- URL的流处理程序。 - 异常
-
MalformedURLException
- 如果未指定协议或未知协议,或者spec
为null
,或者解析的URL不符合相关协议的具体语法。 -
SecurityException
- 如果存在安全管理员,并且其checkPermission
方法不允许指定流处理程序。 - 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
,URLStreamHandler
,URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
-
-
方法详细信息
-
getQuery
public String getQuery()
获取此URL
的查询部分。- 结果
-
查询这个
URL
部分,或者是null
如果不存在的话 - 从以下版本开始:
- 1.3
-
getPath
public String getPath()
获取此URL
的路径部分。- 结果
-
这个
URL
的路径部分,或一个空字符串(如果不存在) - 从以下版本开始:
- 1.3
-
getUserInfo
public String getUserInfo()
获取这个URL
的userInfo部分。- 结果
-
该用户信息部分为
URL
,或null
如果不存在 - 从以下版本开始:
- 1.3
-
getAuthority
public String getAuthority()
获得这个URL
的权限部分。- 结果
-
该权限部分为
URL
- 从以下版本开始:
- 1.3
-
getPort
public int getPort()
获取此URL
的端口号。- 结果
- 端口号,如果端口未设置,则为-1
-
getDefaultPort
public int getDefaultPort()
获取与此URL
关联的协议的默认端口号。 如果URL方案或URL的URLStreamHandler未定义默认端口号,则返回-1。- 结果
- 端口号
- 从以下版本开始:
- 1.4
-
getProtocol
public String getProtocol()
获取此协议名称URL
。- 结果
-
该协议
URL
。
-
getHost
public String getHost()
获取此URL
的主机名(如适用)。 主机的格式符合RFC 2732,即对于一个文字的IPv6地址,该方法将返回包含在方括号('['
和']'
)中的IPv6地址。- 结果
-
该主机名称为
URL
。
-
getFile
public String getFile()
获取此URL
的文件名。 返回的文件部分将与getPath()
相同,加上值为getQuery()
的连接(如果有)。 如果没有查询部分,此方法和getPath()
将返回相同的结果。- 结果
-
该文件名为
URL
,如果不存在,则为空字符串
-
getRef
public String getRef()
获得这个URL
的锚点(也称为“参考”)。- 结果
-
该
URL
的锚点(也称为“参考”)或null
如果不存在
-
equals
public boolean equals(Object obj)
将此URL与其他对象进行比较。如果给定的对象不是一个URL,那么这个方法将立即返回
false
。如果两个URL对象具有相同的协议,引用等效主机,主机上具有相同的端口号,以及该文件的相同文件和片段,则它们是相等的。
如果两个主机名都可以解析成相同的IP地址,则两台主机被认为是等效的; 否则如果任一主机名无法解析,主机名必须相等而不考虑大小写; 或两个主机名等于null。
由于主机比较需要名称解析,因此此操作是阻塞操作。
注意:已知与
equals
的定义行为与HTTP中的虚拟主机不一致。- 重写:
-
equals
在Object
- 参数
-
obj
- 要比较的URL。 - 结果
-
true
如果对象是一样的;false
否则。 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
创建适合哈希表索引的整数。哈希码基于与URL比较相关的所有URL组件。 因此,该操作是阻塞操作。
- 重写:
-
hashCode
在Object
- 结果
-
这个
URL
的哈希码。 - 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
sameFile
public boolean sameFile(URL other)
比较两个URL,不包括片段组件。如果这个
URL
和other
参数是相等的,而不考虑片段组件,则返回true
。- 参数
-
other
- 与URL
进行比较。 - 结果
-
true
如果他们引用同一个远程对象;false
否则。
-
toString
public String toString()
构造一个URL
的字符串表示URL
。 该字符串是通过调用该对象的流协议处理程序的toExternalForm
方法创建的。- 重写:
-
toString
在Object
- 结果
- 该对象的字符串表示形式。
- 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
,URLStreamHandler.toExternalForm(java.net.URL)
-
toExternalForm
public String toExternalForm()
构造此URL
的字符串表示URL
。 该字符串是通过调用该对象的流协议处理程序的toExternalForm
方法创建的。
-
toURI
public URI toURI() throws URISyntaxException
返回相当于此URL的URI
。 该方法的功能与new URI (this.toString())
相同。请注意,符合RFC 2396的任何URL实例都可以转换为URI。 但是,一些不严格遵守的URL不能转换为URI。
- 结果
- 与此URL相当的URI实例。
- 异常
-
URISyntaxException
- 如果此URL严格按照RFC2396进行格式化,不能转换为URI。 - 从以下版本开始:
- 1.5
-
openConnection
public URLConnection openConnection() throws IOException
返回一个URLConnection
实例表示由所引用的远程对象的连接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。
- 结果
-
链接到URL的一个
URLConnection
。 - 异常
-
IOException
- 如果发生I / O异常。 - 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
-
openConnection
public URLConnection openConnection(Proxy proxy) throws IOException
- 参数
-
proxy
- 将通过该连接进行的代理。 如果需要直接连接,则应指定Proxy.NO_PROXY。 - 结果
-
一个
URLConnection
的URL。 - 异常
-
IOException
- 如果发生I / O异常。 -
SecurityException
- 如果存在安全管理器,并且呼叫者没有连接到代理的权限。 -
IllegalArgumentException
- 如果代理为空,或者代理的类型不正确,则会抛出 -
UnsupportedOperationException
- 如果实现协议处理程序的子类不支持此方法。 - 从以下版本开始:
- 1.5
- 另请参见:
-
URL(java.lang.String, java.lang.String, int, java.lang.String)
,URLConnection
,URLStreamHandler.openConnection(java.net.URL, java.net.Proxy)
-
openStream
public final InputStream openStream() throws IOException
打开与此URL
的连接,并返回一个InputStream
用于从该连接读取。 这个方法是一个简写:openConnection().getInputStream()
- 结果
- 用于从URL连接读取的输入流。
- 异常
-
IOException
- 如果发生I / O异常。 - 另请参见:
-
openConnection()
,URLConnection.getInputStream()
-
getContent
public final Object getContent() throws IOException
获取此URL的内容。 这个方法是一个简写:openConnection().getContent()
- 结果
- 这个URL的内容。
- 异常
-
IOException
- 如果发生I / O异常。 - 另请参见:
-
URLConnection.getContent()
-
getContent
public final Object getContent(Class<?>[] classes) throws IOException
获取此URL的内容。 这个方法是一个简写:openConnection().getContent(classes)
- 参数
-
classes
- 一个Java类型的数组 - 结果
- 该URL的内容对象是类数组中指定的类型的第一个匹配项。 如果不支持请求的类型,则为null。
- 异常
-
IOException
- 如果发生I / O异常。 - 从以下版本开始:
- 1.3
- 另请参见:
-
URLConnection.getContent(Class[])
-
setURLStreamHandlerFactory
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()
-
-