读书笔记-java网络编程-5URL和URI-URL类
来源:互联网 发布:淘宝diy耳机哪家好 编辑:程序博客网 时间:2024/05/22 15:43
2. URL类
java.net.URL类是对url的抽象,是一个final类。URL类不可变,构造一个URL对象后,其字段不在改变,因此它是线程安全的。使用了策略设计模式。
2.1 创建新的URL
public URL(String url) throws MalformedURLExceptionpublic URL(String protocol, String hostname, String file) throws MalformedURLExceptionpublic URL(String protocol, String host, int port, String file) throws MalformedURLExceptionpublic URL(URL base,String relative) throws MalformedURLException
- 支持协议
所有虚拟机都支持:http、file
java支持:https、jar、ftp
一部分虚拟机:mailto、gopher,定制协议:doc、netdoc、systemresouce和java内部使用的verbatim
如果某个虚拟机不支持你需要的协议:
可以为该模式安装一个协议处理器
更建议的做法是为该协议定制一个API
除了验证能否识别URL模式外,java不会对它构造的URL完成任何正确性检查。而需要程序员去确认。
2.1.1 从字符串构造URL
public URL(String url) throws MalformedURLException
2.1.2 由组成部分构造URL
public URL(String protocol, String hostname, String file) throws MalformedURLException
这里将端口设为-1,所以会使用该协议的默认端口。
file参数应该以斜线开头,包括路径、文件名和可选的片段标识符。
2.1.3 构造相对URL
public URL(URL base,String relative) throws MalformedURLException
2.1.4 其他URL对象来源
- 在applet中,getDocumentBase()会返回包含这个applet的页面的URLgetCodeBase()会返回applet.class文件的URL。
- java.io.File类有一个toURL方法,返回与指定文件匹配的fileURL。
- 类加载器中。ClassLoader.getSystemResource(String name )返回一个URL,ClassLoader.getSystemResources(String name )返回一个URL列表。实例方法getResource(String name )会在所引用类加载器使用的路径中搜索指定资源的URL。
2.2 从URL获取数据
InputStream openStream()
在客户端和服务器之间完成必要的握手,返回一个InputStream,可以由此读取数据。
注意是使用释放模式或者带资源的try来确保Stream使用后关闭。
从这个Stream读取的数据是原始内容,如果原始内容是ascii码就是ascii码,如果是HTML就是HTML。
因此这里有一个比较麻烦的问题是如何确定读取原始内容的类型,当然有时还可以通meta数据读取。但是未必每次都能成功。有时候可以openConnection方法返回URLconnection对象来读取。
public URLConnection openConnection()
为指定的URL打开一个socket,并返回一个URLConnection对象。URLConnection表示一个网络资源的打开的连接。
如果希望与服务器直接通信,应该使用这个方法。通URLConnection,你可以访问服务器发送的所有数据。除了原始的文档,还可以访问协议指定的元数据。
这个方法还有一个重载版本
public URLConnection openConnection(Proxy proxy)
这会覆盖用平常的socksProxyHost、socksProxyPort、http.proxyHost、http.proxyPort、http.nonProxyHosts和类似的属性设置的任何代理服务器。
如果协议处理器不支持代理,这个参数将被忽略,如果可能将直接建立连接
public final Object getContent()
是下载URL引用数据的第三种方法。getContent()方法获取由URL引用的数据,尝试由它建立某种类型的对象。通常来说使用Object 来获取引用,然后用instanceof检测类型。通常来说需要猜测获得的类型。
2.3 分解URL
URL的每个部分都有对应的get方法。
http://www.ibiblio.org/javafaq/books/jnp/index.html?isbn=15623534#tocc
模式:http
授权机构:www.ibiblio.org
路径:/javafaq/books/jnp/index.html
片段标识符:tocc
查询字符串:isbn=15623534
http://admin@www.blackstar.com:8080/
授权机构:admin@www.blackstar.com:8080/
用户信息:admin
主机:www.blackstar.com
端口:8080
2.4 相等性和比较
当且仅当,URL指向相同的主机端口号和路径上的相同子元素,而且有相同的片段标识符和查询字符串时,才认为相等。
但是这样说了URL上的equals可能是一个阻塞的IO操作.出于这个原因,应该避免将URL存储在一来equals的数据结构中,如java.utl.HashMap。更好的选择是java.net.URI。可以在必要时将URI与URL来回转换
但是另一方面,equals还不够深入。不会具体的比较两个URL标识的资源。也没有实现Comparable接口。
还有一个sameFile方法类似于equals。但是这个方法不会考虑片段标识符
2.5 比较
toStringtoExternalForm
toString总是将转换成绝对URL,toExternalForm也类似
toURI
这里需要说明一下URI的好处。URI 提供了更精确、更符合规范的行为。
对于绝对化和编码,在选择时应当首选URI类。
如果需要把URL存储在散列表或者其他数据结构中,也应该首选URI类,因为它的equals不会阻塞。
URL类主要用于从服务器下载内容。
- 读书笔记-java网络编程-5URL和URI-URL类
- 读书笔记-java网络编程-5URL和URI-URI类
- 读书笔记-java网络编程-5URL和URI-简述
- 读书笔记-java网络编程-5URL和URI-代理
- 读书笔记-java网络编程-5URL和URI-x-www-form-urlencoded
- Java网络编程URL和URI
- Java网络编程URL和URI
- Java网络编程之URL和URI
- 读书笔记-java网络编程-6URL和URI-HTTP协议和cookie的java实现
- Java网络编程之URI、URL研究
- java network programming读书笔记(3) URL类和URI类
- Java URL和URI
- android URL 和 URI编程
- Java网络编程之URI、URL研究(上)
- Java网络编程之URI、URL研究(下)
- Java网络编程之URI、URL研究(下) 01
- Java网络编程之URI、URL研究(下) 03
- [网络编程学习笔记]Web 概念:URI,URN和URL
- LeetCode(三)——Reverse String
- LIBSVM-3.21在python下的使用
- python中全局变量
- matlab-基础 取复数的虚部的函数
- 理解长短期记忆(LSTM) 神经网络
- 读书笔记-java网络编程-5URL和URI-URL类
- 安卓中xml解析天气预报
- 生活中的数学 —— 操场几何学
- 一键让Linux的vim显示行号
- 2016/7/4日-你若安好,便是晴天.
- 汇编(三)
- matlab-基础 求复数的模的函数
- 安卓开发之Android studio安卓过程出现的问题及解决方法
- 类集框架Map