URL和URI

URL和URI

简介

URI(Uniform Resource Identifier)统一资源标识符,是采用一种特定语法标识一个资源的字符串。

URL(Uniform Resource Locator)统一资源定位符,URL可以标识一个资源在Internet上的位置。URL是最常见的URI

URI

URI的语法为:[模式:模式特定部分]

当前模式包括:

data 链接中直接包含的Base64编码数据

file 本地磁盘上的文件

ftp FTP服务器

http 使用超文本传输协议的国际互联网服务器

mailto 电子邮件地址

telnet 与基于Telnet的服务的连接

urn 统一资源名

URI中的模式特定部分没有特定的语法,不过,很多都采用层次结构形式,如:http://www.xxx.com/aa?query

模式部分由小写字母、数字和+. _ 组成。典型URI的其他三部分(授权机构、路径和查询)有ASCII字母数字组成,此外还可以使用- _ . ! ~。定界符包括(/ ? & =)。所有其他字符应当用%转义,如“木”的utf-8为E6 9C A8,它在URI中编码为%E6%9C%A8。

URL

URL是一个URI,除了标识一个资源,还会为资源提供一个特定的网络位置。

URL的语法为:[protocol://userInfo@host:port/path?query#fragment]

protocol协议可以是file、ftp、http、https、magnet、telnet

host主机部分可以是主机名如www.xxx.com也可以是服务器IP地址xxx.xxx.xxx.xxx

userInfo部分是服务器的登录信息(可选)

port端口号(可选)默认80

userInfo@host:port构成权威机构

path路径指向服务器一个特定目录。

query查询字符串向服务器提供附加参数。

fragment片段指向远程资源的某个特定部分。

相对URL

在www.xxx.com/aaa/text页面点击将访问www.xxx.com/aaa/doc

如果相对链接以“/”开头,将访问www.xxx.com/doc。

URL url1 = new URL("http://www.xxx.com/aaa/text");
URL url2 = new URL(url1,"text");
URL url3 = new URL(url1,"/text");
System.out.println(url2+"\n"+url3);

输出:

http://www.xxx.com/aaa/text

http://www.xxx.com/text

URL和URI的区别

统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来。

举个例子:

比如我的身份证号码320XXXXX0001就是URI。

中国/东南大学/计算机楼/xxx/我的名字就是URL。

所以不论是用定位的方式还是用编号的方式,我们都可以唯一确定一个人,都是URI的一种实现,而URL就是用定位的方式实现的URI。

Java中的URI和URL

URL类

java.net.URL是final类。

常用方法(除了一些get方法):

public final InputStream openStream() throws java.io.IOException

打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。这只是完全把网络上的资源当成二进制流来处理,编码方式的检测和声明是Web体系结构中比较棘手的问题之一。

public URLConnection openConnection() throws java.io.IOException
public URLConnection openConnection(Proxy proxy)throws java.io.IOException

返回一个URLConnection 对象,它表示到 URL 所引用的远程对象的连接。通过URLConnection对象可以访问原始文档外还可以访问HTTP首部等信息。

public final Object getContent() throws java.io.IOException

下载URL引用数据的第三种方法。

URI toURI() 返回与此 URL 等效的 URI。

其他方法可以参照API。

URI类

同样是final类。URI是对URL的抽象,不仅包括URL还包括URN(Uniform Resource Names)。实际使用的URI大多是URL。

常用方法:

URI relativize(URI uri)

         根据此 URI 将给定 URI 相对化。

URI resolve(String str)

         解析给定的字符串,然后在此URI 的基础上构造一个新的 URI。

URI resolve(URI uri)

         根据此 URI 解析给定的 URI。

String toASCIIString()

         以 US-ASCII 字符串形式返回此 URI 的内容。

String toString()

         以字符串形式返回此 URI 的内容。

URL toURL()

         根据此 URI 构造一个 URL。

x-www-form-urlencoded

不知道这么长的名字是谁起的,意思就是在web中传输的非ASCII字符需要进行编码。

URLEncoder

编码方式比较简单,除了ASCII数字、字母和- _ . ,其他字符都要转换为字节,每个字节要写成%两个十六进制数字。空格是一种特殊情况,除了编码为%20,空格可以编码为+。

String encoded = URLEncoder.encode("aaa bbb ccc 中国","UTF-8");
System.out.println(encoded);

输出:

aaa+bbb+ccc+%E4%B8%AD%E5%9B%BD

注意URLEncoder会进行盲目编码,比如/&=:等有时候在URL中是必须的,所以编码时需要部分处理。

URLDecoder

String decoded = URLDecoder.decode("aaa+bbb+ccc+%E4%B8%AD%E5%9B%BD","UTF-8");
System.out.println(decoded);

输出:

aaa bbb ccc 中国

 

你可能感兴趣的:(JavaWeb)