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的内容:
在其中包含相对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
类,但仅适用于与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 >被协议的名称替换。 如果此类不存在,或者类存在但不是<package>.<protocol>.Handler
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
引用被解析为方案,权限,路径,查询和片段部分。 如果路径组件为空,并且方案,权限和查询组件未定义,则新URL是对当前文档的引用。 否则,规范中存在的片段和查询部分将用于新的URL。<scheme>://<authority><path>?<query>#<fragment>
如果方案组件在给定规范中定义,并且与上下文方案不匹配,则根据规范单独创建新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()