java中的url和uri

       URL和URLConnection类封装了大量的复杂的实现细节,这些细节涉及到怎样从远程站点获取信息。

例如:我们可以通过传递一个字符串来构建一个URL对象

URL url = new URL("urlString");

       如果只是想要从该资源获取内容,可以用URL类提供的openStream方法。返回一个InputStream对象。

然后按照一般的方法进行获取,比如:

InputStream inStream = url.openStream();

Scanner in = new Scanner(inStream);

       java.net包对统一资源定位符(uniform resource locator,URL)和统一资源标识符(uniform resource identifier,URI)

作了非常有用的区分。

       URI是个纯粹的句法结构,用于指定标识web资源的字符串的各个不同部分。URL是URI的一个特例,它包含了用于定位

web资源的足够信息。其它URI,如:  mailto:****@163.com 则不属于定位符,因为根据该标识符我们无法定位任何数据。

像这样的URI我们称为URN(uniform resource name ,统一资源名称)。

        java的类库中,URI类不包含任何用于访问资源的方法,它的唯一作用就是解析。相反的是URL类可以打开一个到达资源的

流。因此,URL类只能作用于java类库知道该如何处理的模式,如:http:。https:.tfp:本地文件系统(file:)和jar文件(jar:)。为了

解对URI进行解析并不是可有可无的,要考虑它也许会变得非常复杂。如:

http://maps.yahoo.com/py/maps.py?csz=Cupertino+CA

ftp://username:[email protected]/pub/file.txt

URI规范出了标记这些标识符的规则。一个URI具有以下句法:

[scheme:]schemeSpecificPart[#fragment]

上面的式子中[...]表示可行部分,它与:和#可以被包含在标识符内。它包含scheme:部分的URI被称为绝对URI。否则,被称为相对URI。

如果绝对的透明URI的schemeSpecificPart不是以/开头的,我们就称它不是透明的。例如:

mailto:***@163.com   所以绝对的透明URI和所有相对URI都是分层的(hierarchical)。例如:

http://ipc.me.index.html

../../java/net/socket.html#Socket()

一个分层的URI的schemeSpecificPart具有以下的结构:[//authority][path][?query] 在这里,[....]同样表示可选。

对于那些基于服务器的URI,authority部分采用以下的形式:[user-info@]host[:port]  port表示服务器中的端口必须是一个整数。

 

         URI的作用之一是:解析标识符并将它分解成各种不同的组成部分。可用以下的方法读取各个部分:

getScheme    getSchemeSpecificPart      getAuthority    getUserInfo      getHost

getPort           getPath                              getQuery         getFragment

URI的另一个作用是:处理绝对标识符和相对标识符。如果存在一个如下的绝对URI:

http://docs.mycompany.com/api/java/net/ServerSocket.html

和一个如下的相对URI:

../../java/net/Socket.html#Socket()

那么可以把它们合并成一个绝对的URI:

http://doc.mycompany.com/api/java/net/Socket.html#Socket()

这个过程被 称为相对URL的转换。(resolving)

与此相反的过程被称为“相对化”。例如,有一个基本的URI:

http://docs.mycompany.com/api 和另一个URI:

http://doc.mycompany.com/api/java/lang/String.html 那么它们相对化之后的URI就是

java/lang/Stirng.htlml

URI类同时支持以下两个操作:

relative = base.relativize(combined);

combined = base.resolve(relative);

 

 

 

你可能感兴趣的:(java中的url和uri)