3、URL和URI(上)
URI
统一资源标识符(URI)是采用一种特定的语法表示一个资源的字符串
所有的资源标识可能是服务器上的一个文件
资源是由URI标识的内容
URI则是标识一个资源的字符串
URI的组成:
模式:模式特定部分
特定部分的语法取决于所用的模式:
1、date:连接中直接包含的Base64编码数据
2、file:本地磁盘上的文件
3、ftp“ftp服务器
4、http:使用超文本传输协议的国际互联网服务器
5、mailto:电子邮件地址
6、magnet:可以通过对等网络下载资源
7、telnet:与基于Telnet的服务的连接
8、urn:统一资源名
URLs
URL是一个URI,除了标识一个资源,还会为资源提供一个特定的网络位置
客户端可以用它来标识获取这个资源
通用的URI可以告诉一个资源是什么但是无法告知在哪
java.net.ERI:只标识资源
java.netnURL:既能标识资源又能获取资源
URL中的网络位置通常包括用来访问服务器的协议(HTTP等)
服务器的主机名或IP地址,以及文件在该文件服务器上的路径
URL类
java.net.URL类是统一资源定位符的抽象
扩展了Java.lang,Object是一个final类,不能派生子类
不依赖继承来配置不同类型的URL的实例,而是使用了策略模式
协议处理器就是策略,URL类构成上下文,通过他来选择不同的策略
URL是不可变的,构造一个URL对象之后,其字段不在改变
可以保证线程安全
创建新的URL对象
构造的一个不支持协议创建URL对象
或者语法不正确
都会进行抛出MalformedURLException异常
字符串构造URL
最简单的构造方式接受一个字符串形式的URL作为唯一的参数
URL url = new URL("https://www.baidu.com");
可以使用getProtocol()方法来得URL的协议
URL url = new URL("https://www.baidu.com"); System.out.println(url.getProtocol());
组成部分构造URL
将端口设为-1标识会使用默认的端口
file:应当用下线开头,包括路径、文件名、可选的片段标识符
http://www.w3school.com.cn/html/index.asp
使用HTTP默认的端口80
文件规范包括指型一个引用
如果虚拟机不支持HTTP这个代码会抛出一异常
指定端口
构造相对URL
构造函数根据相对的URL和基础的URL构建一个绝对的URL
此时根据url可以计算新的URLhttp://www.w3school.com.cn/html/second.asp
循环处理位于同一个目录下的一组文件,这个构造函数很有用
从URL获取数据
最长使用的方法:opebStream(),会返回一个InputStream,可以从这个流中读取数据
需要更多的哦内阁制下载过程调用openConnection()
者会提供一个可配置的URLConnection,在由它得到一个InputStream
getContent()向URL请求其内容,这回提供一个完整的对象(如Image、String)会返回一个InputStream
openStream()方法连接到URL所引用的资源
在客户端和服务器之间完成必要的握手
返回一个InputStream,可以由此读取数据
从这个InputStream获得的数据是URL引用原始内容
如果读取ASCII文本文件则为ASCII
如果读取HTML文件则为原始的HTML
如果读取图像文件则为二进制图片数据
不包括任何HTTP首部或者协议有关的任何信息
可以向读取任何其他InputStream一样读取这个InputStream
该方法为指定的URL打开一个socket
返回一个URLConnection对象
URLConnection标识一个网络资源的打开链接
如果调用失败,会抛异常
如果希望与服务器直接通信,应当使用这个方法
通过URLConnection可以访问服务器发送的所有数据:除了原始文件之外,还可以访问这个协议指定的所有元数据
重载方法:
是下载URL引用数据的第三种方法
获取由URL引用的数据,尝试建立某种类型的对象
如果URL指示某种文本(ASCII或HTML),返回对象通常是InputStream
如果URL只是一个图像,返回通常是一个ImageProducer
这两个类的共同点:本身不是数据对象,是一种途径
问题:很难预测将获得那种对象
可鞥 得到某个INputStream或者ImageProducer,或者AudioClip
用instance操作符很容易检查
URL的内容处理器可以提供一个资源不同的视图
getContent()方法重载版本允许选择希望的类型进行返回