Most visited

Recently visited

Added in API level 1

URL

public final class URL
extends Object implements Serializable

java.lang.Object
   ↳ java.net.URL


URL表示统一资源定位符,指向万维网上“资源”的指针。 资源可以像文件或目录一样简单,也可以是对更复杂对象的引用,例如对数据库或搜索引擎的查询。 有关URL及其格式类型的更多信息,请访问:

http://www.socs.uts.edu.au/MosaicDocs-old/url-primer.html

通常,URL可以分成几个部分。 前面的URL示例指出要使用的协议是http (超文本传输协议),并且该信息驻留在名为www.socs.uts.edu.au的主机上。 该主机上的信息被命名为/MosaicDocs-old/url-primer.html 主机上这个名字的确切含义既取决于协议,也取决于主机。 这些信息通常驻留在一个文件中,但它可以即时生成。 URL的这个组件称为路径组件。

URL可以选择指定一个“端口”,它是在远程主机上建立TCP连接的端口号。 如果未指定端口,则会使用协议的默认端口。 例如, http的默认端口是80 另一个端口可以被指定为:

     http://www.socs.uts.edu.au:80/MosaicDocs-old/url-primer.html
 

的语法URL由下式定义RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax ,通过修正RFC 2732: Format for Literal IPv6 Addresses in URLs Literal IPv6地址格式还支持scope_ids。 scope_ids的语法和用法见here

一个URL可能会附加一个“片段”,也称为“ref”或“reference”。 该片段由尖号“#”后面加上更多字符表示。 例如,

     http://java.sun.com/index.html#chapter1
 

这个片段在技术上并不是URL的一部分。 相反,它表明在检索到指定的资源之后,应用程序特别感兴趣的是附有标签chapter1那部分文档。 标签的含义是特定于资源的。

应用程序还可以指定一个“相对URL”,它只包含足够的信息来访问相对于另一个URL的资源。 HTML页面中经常使用相对URL。 例如,如果URL的内容为:

     http://java.sun.com/index.html
 
contained within it the relative URL:
     FAQ.html
 
it would be a shorthand for:
     http://java.sun.com/FAQ.html
 

相对URL不需要指定URL的所有组件。 如果协议,主机名或端口号缺失,则该值将从完全指定的URL继承。 文件组件必须指定。 可选片段不会被继承。

根据RFC2396中定义的转义机制,URL类本身不编码或解码任何URL组件。 调用者有责任对任何字段进行编码,这些字段在调用URL之前需要被转义,并且还要解码从URL返回的任何转义字段。 此外,因为URL不知道URL转义,所以它不能识别相同URL的编码或解码形式之间的等同性。 例如,这两个网址:

    http://foo.com/hello world/ and http://foo.com/hello%20world
would be considered not equal to each other.

请注意,在某些情况下, URI类会执行转义其组件字段的操作。 管理URL编码和解码的推荐方法是使用URI ,并使用toURI()toURL()在这两个类之间进行转换。

也可以使用 URLEncoderURLDecoder类,但仅用于HTML表单编码,这与RFC2396中定义的编码方案不同。

Summary

Public constructors

URL(String protocol, String host, int port, String file)

创建 URL从指定对象 protocolhostport号码,和 file

URL(String protocol, String host, String file)

根据指定的 protocol名称, host名称和 file名称创建一个URL。

URL(String protocol, String host, int port, String file, URLStreamHandler handler)

创建 URL从指定对象 protocolhostport号码, file ,和 handler

URL(String spec)

String表示中创建一个 URL对象。

URL(URL context, String spec)

通过在指定的上下文中解析给定的规范来创建URL。

URL(URL context, String spec, URLStreamHandler handler)

通过在指定的上下文中使用指定的处理程序解析给定的规范来创建URL。

Public methods

boolean equals(Object obj)

将这个URL与另一个对象进行比较。

String getAuthority()

获取此 URL的权威部分。

final Object getContent()

获取此URL的内容。

final 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(Proxy proxy)

openConnection()相同,但连接将通过指定的代理进行; 不支持代理的协议处理程序将忽略代理参数并建立正常连接。

URLConnection openConnection()

返回一个 URLConnection实例表示由所引用的远程对象的连接 URL

final InputStream openStream()

打开与此 URL的连接并返回 InputStream以从该连接读取。

boolean sameFile(URL other)

比较两个网址,不包括片段组件。

static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)

设置应用程序的 URLStreamHandlerFactory

String toExternalForm()

构造此 URL的字符串表示 URL

String toString()

构造这个 URL的字符串表示。

URI toURI()

返回等同于此URL的 URI

Protected methods

void set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref)

设置URL的指定8个字段。

void set(String protocol, String host, int port, String file, String ref)

设置URL的字段。

Inherited methods

From class java.lang.Object

Public constructors

URL

Added in API level 1
URL (String protocol, 
                String host, 
                int port, 
                String file)

创建 URL从指定对象 protocolhostport号码,和 file

host可以表示为主机名或文字IP地址。 如果使用IPv6文字地址,则应将其用方括号( '['']' )括起来,如RFC 2732所指定; 但是,也接受RFC 2373: IP Version 6 Addressing Architecture定义的文字IPv6地址格式。

指定 port数字 -1表示URL应该使用协议的默认端口。

如果这是使用指定协议创建的第一个URL对象,则为该协议创建一个 流协议处理程序对象,即类 URLStreamHandler一个实例:

  1. If the application has previously set up an instance of URLStreamHandlerFactory as the stream handler factory, then the createURLStreamHandler method of that instance is called with the protocol string as an argument to create the stream protocol handler.
  2. If no URLStreamHandlerFactory has yet been set up, or if the factory's createURLStreamHandler method returns null, then the constructor finds the value of the system property:
             java.protocol.handler.pkgs
         
    If the value of that system property is not null, it is interpreted as a list of packages separated by a vertical slash character '|'. The constructor tries to load the class named:
             <package>.<protocol>.Handler
         
    where <package> is replaced by the name of the package and <protocol> is replaced by the name of the protocol. If this class does not exist, or if the class exists but it is not a subclass of URLStreamHandler, then the next package in the list is tried.
  3. If the previous step fails to find a protocol handler, then the constructor tries to load from a system default package.
             <system default package>.<protocol>.Handler
         
    If this class does not exist, or if the class exists but it is not a subclass of URLStreamHandler, then a MalformedURLException is thrown.

以下协议的协议处理程序保证存在于搜索路径中: -

     http, https, ftp, file, and jar
 
Protocol handlers for additional protocols may also be available.

这个构造函数不会验证输入。

Parameters
protocol String: the name of the protocol to use.
host String: the name of the host.
port int: the port number on the host.
file String: the file on the host
Throws
MalformedURLException if an unknown protocol is specified.

也可以看看:

URL

Added in API level 1
URL (String protocol, 
                String host, 
                String file)

根据指定的protocol名称, host名称和file名称创建一个URL。 使用指定协议的默认端口。

此方法等效于调用带参数是四个参数的构造函数protocolhost-1 ,并file 这个构造函数不会验证输入。

Parameters
protocol String: the name of the protocol to use.
host String: the name of the host.
file String: the file on the host.
Throws
MalformedURLException if an unknown protocol is specified.

也可以看看:

URL

Added in API level 1
URL (String protocol, 
                String host, 
                int port, 
                String file, 
                URLStreamHandler handler)

创建URL从指定对象protocolhostport号码, file ,和handler 指定一个port数字-1表示URL应该使用协议的默认端口。 指定handlernull表示该URL应该使用该协议的默认流处理程序,如下所示:java.net.URL#URL(java.lang.String,java.lang.String,int,java.lang.String )

如果处理程序不为空并且存在安全管理器,则安全管理器的checkPermission方法NetPermission("specifyStreamHandler")权限被调用。 这可能会导致SecurityException。 这个构造函数不会验证输入。

Parameters
protocol String: the name of the protocol to use.
host String: the name of the host.
port int: the port number on the host.
file String: the file on the host
handler URLStreamHandler: the stream handler for the URL.
Throws
MalformedURLException if an unknown protocol is specified.
SecurityException if a security manager exists and its checkPermission method doesn't allow specifying a stream handler explicitly.

也可以看看:

URL

Added in API level 1
URL (String spec)

String表示中创建一个 URL对象。

这个构造函数相当于使用 null第一个参数调用双参数构造函数。

Parameters
spec String: the String to parse as a URL.
Throws
MalformedURLException if no protocol is specified, or an unknown protocol is found, or spec is null.

也可以看看:

URL

Added in API level 1
URL (URL context, 
                String spec)

通过在指定的上下文中解析给定的规范来创建URL。 新的URL是根据RFC2396“统一资源标识符:通用*语法”中描述的给定上下文URL和spec参数创建的:

          <scheme>://<authority><path>?<query>#<fragment>
 
The reference is parsed into the scheme, authority, path, query and fragment parts. If the path component is empty and the scheme, authority, and query components are undefined, then the new URL is a reference to the current document. Otherwise, the fragment and query parts present in the spec are used in the new URL.

如果方案组件是在给定的规范中定义的,并且与上下文的方案不匹配,则新URL将根据规范单独创建为绝对URL。 否则,方案组件将从上下文URL继承。

如果规范组件存在于规范中,则规范将被视为绝对规范,规范权限和路径将取代上下文权限和路径。 如果规范中缺少权威组件,那么新URL的权限将从上下文继承。

如果规范的路径组件以斜杠字符“/”开头,那么该路径将被视为绝对路径,并且规范路径会替换上下文路径。

否则,路径被视为相对路径并被附加到上下文路径,如RFC2396中所述。 此外,在这种情况下,通过删除由“..”和“。”出现的目录更改来对该路径进行规范化。

有关URL解析的更详细说明,请参阅RFC2396。

Parameters
context URL: the context in which to parse the specification.
spec String: the String to parse as a URL.
Throws
MalformedURLException if no protocol is specified, or an unknown protocol is found, or spec is null.

也可以看看:

URL

Added in API level 1
URL (URL context, 
                String spec, 
                URLStreamHandler handler)

通过在指定的上下文中使用指定的处理程序解析给定的规范来创建URL。 如果处理程序为空,则解析与两个参数构造函数一样。

Parameters
context URL: the context in which to parse the specification.
spec String: the String to parse as a URL.
handler URLStreamHandler: the stream handler for the URL.
Throws
MalformedURLException if no protocol is specified, or an unknown protocol is found, or spec is null.
SecurityException if a security manager exists and its checkPermission method doesn't allow specifying a stream handler.

也可以看看:

Public methods

equals

Added in API level 1
boolean equals (Object obj)

将这个URL与另一个对象进行比较。

如果给定的对象不是URL,则此方法立即返回 false

如果两个URL对象具有相同的协议,参考等效主机,在主机上具有相同的端口号以及文件的相同文件和片段,则两个URL对象相等。

如果此URL等于o则返回true。 如果URL具有相同的协议,主机,端口,文件和引用,则它们是相等的。

Network I/O Warning

URL.equals()的一些实现通过网络解析主机名。 这是有问题的:

  • The network may be slow. Many classes, including core collections like Map and Set expect that equals and hashCode will return quickly. By violating this assumption, this method posed potential performance problems.
  • Equal IP addresses do not imply equal content. Virtual hosting permits unrelated sites to share an IP address. This method could report two otherwise unrelated URLs to be equal because they're hosted on the same server.
  • The network may not be available. Two URLs could be equal when a network is available and unequal otherwise.
  • The network may change. The IP address for a given host name varies by network and over time. This is problematic for mobile devices. Two URLs could be equal on some networks and unequal on others.

Android 4.0(冰淇淋三明治)解决了这个问题。 在该版本中,只有主机名相同(忽略大小写),URL才是相等的。

Parameters
obj Object: the URL to compare against.
Returns
boolean true if the objects are the same; false otherwise.

getAuthority

Added in API level 1
String getAuthority ()

获取此 URL的权威部分。

Returns
String the authority part of this URL

getContent

Added in API level 1
Object getContent ()

获取此URL的内容。 这种方法是一个简写:

     openConnection().getContent()
 

Returns
Object the contents of this URL.
Throws
IOException if an I/O exception occurs.

也可以看看:

getContent

Added in API level 1
Object getContent (Class[] classes)

获取此URL的内容。 这种方法是一个简写:

     openConnection().getContent(Class[])
 

Parameters
classes Class: an array of Java types
Returns
Object the content object of this URL that is the first match of the types specified in the classes array. null if none of the requested types are supported.
Throws
IOException if an I/O exception occurs.

也可以看看:

getDefaultPort

Added in API level 1
int getDefaultPort ()

获取与此URL关联的协议的默认端口号。 如果URL方案或URL的URLStreamHandler未定义默认端口号,则返回-1。

Returns
int the port number

getFile

Added in API level 1
String getFile ()

获取这个URL的文件名。 返回的文件部分将与getPath()相同,再加上getQuery()的值(如果有的话)的连接。 如果没有查询部分,则此方法和getPath()将返回相同的结果。

Returns
String the file name of this URL, or an empty string if one does not exist

getHost

Added in API level 1
String getHost ()

获取此URL的主机名(如果适用)。 主机的格式符合RFC 2732,即对于文字IPv6地址,此方法将返回方括号( '['']' )中的IPv6地址。

Returns
String the host name of this URL.

getPath

Added in API level 1
String getPath ()

获取此 URL的路径部分。

Returns
String the path part of this URL, or an empty string if one does not exist

getPort

Added in API level 1
int getPort ()

获取此 URL的端口号。

Returns
int the port number, or -1 if the port is not set

getProtocol

Added in API level 1
String getProtocol ()

获取此 URL的协议名称。

Returns
String the protocol of this URL.

getQuery

Added in API level 1
String getQuery ()

获取此 URL的查询部分。

Returns
String the query part of this URL, or null if one does not exist

getRef

Added in API level 1
String getRef ()

获取此 URL的锚点(也称为“参考”)。

Returns
String the anchor (also known as the "reference") of this URL, or null if one does not exist

getUserInfo

Added in API level 1
String getUserInfo ()

获取此 URL的userInfo部分。

Returns
String the userInfo part of this URL, or null if one does not exist

hashCode

Added in API level 1
int hashCode ()

创建一个适合散列表索引的整数。

哈希码基于与URL比较相关的所有URL组件。 因此,该操作是阻止操作。

Returns
int a hash code for this URL.

openConnection

Added in API level 1
URLConnection openConnection (Proxy proxy)

openConnection()相同,但连接将通过指定的代理进行; 不支持代理的协议处理程序将忽略代理参数并建立正常连接。 调用此方法将抢占系统的默认ProxySelector设置。

Parameters
proxy Proxy: the Proxy through which this connection will be made. If direct connection is desired, Proxy.NO_PROXY should be specified.
Returns
URLConnection a URLConnection to the URL.
Throws
IOException if an I/O exception occurs.
SecurityException if a security manager is present and the caller doesn't have permission to connect to the proxy.
IllegalArgumentException will be thrown if proxy is null, or proxy has the wrong type
UnsupportedOperationException if the subclass that implements the protocol handler doesn't support this method.

也可以看看:

openConnection

Added in API level 1
URLConnection openConnection ()

返回一个 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。

Returns
URLConnection a URLConnection linking to the URL.
Throws
IOException if an I/O exception occurs.

也可以看看:

openStream

Added in API level 1
InputStream openStream ()

打开与此URL的连接并返回InputStream以从该连接读取。 这种方法是一个简写:

     openConnection().getInputStream()
 

Returns
InputStream an input stream for reading from the URL connection.
Throws
IOException if an I/O exception occurs.

也可以看看:

sameFile

Added in API level 1
boolean sameFile (URL other)

比较两个网址,不包括片段组件。

如果这个 URLother参数相等,而没有考虑片段组件,则返回 true

Parameters
other URL: the URL to compare against.
Returns
boolean true if they reference the same remote object; false otherwise.

setURLStreamHandlerFactory

Added in API level 1
void setURLStreamHandlerFactory (URLStreamHandlerFactory fac)

设置应用程序的URLStreamHandlerFactory 该方法在给定的Java虚拟机中最多可以调用一次。

URLStreamHandlerFactory实例用于从协议名称构造流协议处理程序。

如果存在安全管理器,则此方法首先调用安全管理器的方法checkSetFactory以确保允许操作。 这可能会导致SecurityException。

Parameters
fac URLStreamHandlerFactory: the desired factory.
Throws
Error if the application has already set a factory.
SecurityException if a security manager exists and its checkSetFactory method doesn't allow the operation.

也可以看看:

toExternalForm

Added in API level 1
String toExternalForm ()

构造此URL的字符串表示URL 该字符串通过调用此对象的流协议处理程序的toExternalForm方法来创建。

Returns
String a string representation of this object.

也可以看看:

toString

Added in API level 1
String toString ()

构造此URL的字符串表示URL 该字符串通过调用此对象的流协议处理程序的toExternalForm方法来创建。

Returns
String a string representation of this object.

也可以看看:

toURI

Added in API level 1
URI toURI ()

返回等同于此URL的URI 该方法的功能与new URI (this.toString())相同。

请注意,符合RFC 2396的任何URL实例都可以转换为URI。 但是,一些不严格遵守的URL不能转换为URI。

Returns
URI a URI instance equivalent to this URL.
Throws
URISyntaxException if this URL is not formatted strictly according to to RFC2396 and cannot be converted to a URI.

Protected methods

set

Added in API level 1
void set (String protocol, 
                String host, 
                int port, 
                String authority, 
                String userInfo, 
                String path, 
                String query, 
                String ref)

设置URL的指定8个字段。 这不是一个公共方法,因此只有URLStreamHandlers可以修改URL字段。 URL是不变的。

Parameters
protocol String: the name of the protocol to use
host String: the name of the host
port int: the port number on the host
authority String: the authority part for the url
userInfo String: the username and password
path String: the file on the host
query String: the query part of this URL
ref String: the internal reference in the URL

set

Added in API level 1
void set (String protocol, 
                String host, 
                int port, 
                String file, 
                String ref)

设置URL的字段。 这不是一个公共方法,因此只有URLStreamHandlers可以修改URL字段。 URL是不变的。

Parameters
protocol String: the name of the protocol to use
host String: the name of the host
port int: the port number on the host
file String: the file on the host
ref String: the internal reference in the URL

Hooray!