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()方法重载版本允许选择希望的类型进行返回

 

 

 

 

 

 

posted @ 2019-05-23 17:32  MrChengs  阅读(290)  评论(0编辑  收藏  举报