读书笔记:
URL URI 区分:
URL (uniform resource localtor)统一资源定位符,URI(uniform resource identifier)统一资源标识符。
URI 是个纯粹的语法结构,用于指定标识web资源的字符串的各个不同部分,URL 是URI的一个特例,它包含定位web资源的足够信息。其它URI 比如:
mailto:cay@horestmann.com
这个不属于定位符,因为根据它我们无法定位任何数据,像这样的URI我们称之为URN 统一资源名称。
在java类库中,URI不包含任何用于访问资源的方法,它唯一的作用就是解析。相反,URL类可以打开一个到达资源的流,因此URL类只能作用于那些java类库知道
该如何处理的模式,例如http: https ftp 本地文件系统, jar文件。
uri规范给出了标识这些标识符的规则,一个uri具有以下的语法:
【scheme:】schemeSpecificPart[#fragment]
schemeSpecificPart具有以下结构:
[//authority][path][?query]
对于那些基于服务器的 URI authority 部分采用了以下的形式:
【user-info@】host[:port]
当然 RFC 2396 还支持一种基于注册表的机制,此时authority采用了不同的格式,不过不做讨论。
uri是分层的。
包含scheme:部分的uri被称为绝对的URI 否则就被称为相对的URI。
如果绝对的URI的schemeSpecificPart不是以/开头的,我们就称它不是透明的。例如:
mailto:cay@horstmann.com 这里cay@....不是以/开头的所以我们称它是不透明的。
uri类的作用之一就是解析标识符并将它分解成各种不同的组成部分。
getScheme
getSchemeSpecificPart
getAuthority
getuserInfo
getHost
getPort
getPath
getQuery
getFragment
uri类的另一个作用是处理绝对的标识符和相对的标识符。如果存在一个如下的绝对的uri
http://docs.mycompany.com/apo/java/net/serversocket.html
和一个相对的uri
../.../java/net/socket.html#Socket()
那么可以将他们合成一个绝对的uri:
http://docs.mycompany.com/apo/java/net/serversocket.html#socket()
被称为相对URL的转换。
与此相反的过程称为相对化。
反过来就是相对化。
relative=base.relativize(combined)
combined=base.resolve(relative)
如果想从web资源获得更多的信息,那么应该使用URLConnection 能得到比url类更多的控制。
想操作一个URLConnection对象必须安排以下操作步骤:
1。调用URL类中的openConnection方法获得URLConnection对象。
URLConnection connection=url.openConnection();
2.使用以下的方法设置任意的请求属性:
setDoinput();
setDoOutput
setIfModifiedSince
setUseCaches
setAllowUserInteraction
setRequestProperty
setConnecttimeout
setReadTimeout
3.调用connect方法连接远程资源:
connection.connect();
除了与服务器建立套接字连接以外,该方法还可用于向服务器查询头信息。
4。与服务器建立连接后,你可以查询头信息。
getHeaderfieldKey和getHeaderfield两个方法列巨额了消息头的所有字段
5。最后访问资源 使用getInputStream方法获得一个输入流于url类中的openStream方法返回的流相同,另一个方法getContent在实际的操作中并不是很有用。
由标准内容类型:(如:text/plain和image/gif)所返回的对象需要使用com.sun层次结构中的类进行处理。