有一个十分重要的类,而我对它知之甚少,它就是:java.net.URL 。在各个框架都能看到它的身影。我平时也常常用到,然而没有器重,了解不够。
URL是什么,格局什么样子?参考维基百科:https://zh.wikipedia.org/wiki…
本文次要是将java.net.URL及相干的几个类的正文进行记录和阐明。
记录和阐明的目标是不便本人的查阅。
1. java.net.URL
/**
* 类URL示意对立资源定位符,指向万维网上的“资源”的指针。
* 资源能够是文件或目录这样简略的货色,也能够是对更简单的对象的援用,例如对数据库或搜索引擎的查问。
* 无关URL类型及其格局的更多信息,请拜访: [Types of URL](http://web.archive.org/web/20051219043731/http://archive.ncsa.uiuc.edu/SDG/Software/Mosaic/Demo/url-primer.html)
* 通常,URL能够分为几个局部。 请思考以下示例:
* http://www.example.com/docs/resource1.html
* 下面的URL示意要应用的协定是http (超文本传输协定),并且该信息驻留在名为www.example.com的主机上。
* 该主机上的信息名为/docs/resource1.html 主机上此名称的确切含意是依赖于协定和依赖于主机。 “信息”通常驻留在文件中,也能够在运行中生成。
* URL能够抉择指定“端口”,该端口是在近程主机上进行TCP连贯的端口号。 如果未指定端口,则应用协定的默认端口。 例如, http的默认端口为80 。 备用端口能够指定为: http://www.example.com:1080/docs/resource1.html
* ...
*/
public final class URL implements java.io.Serializable {
transient URLStreamHandler handler;
/**
* 返回一个URLConnection实例,这个实例代表URL援用的远端对象的一个连贯。
* 每当URL协定对应的handler调用openConnection(URL)一个新的URLConnection会被创立
* 应该留神,一个URLConnection的实例不会在创立的时候建设真正的网络连接。
* 创立实在的网络连接产生在URLConnection.connect()调用。
* 如果对于handler的协定,存在一个公共的、专门的URLConnection子类属于以下包之一或其子包之一:java.lang \ java.io\ java.util\java.net,返回的这个连贯将会是这个子类。例如:
*对于HTTP 协定,一个HttpURLConnection 会被返回,JAR协定的话则JarURLConnection 会被返回。
* /
public URLConnection openConnection() throws java.io.IOException {
return handler.openConnection(this);
}
public final InputStream openStream() throws java.io.IOException {
return openConnection().getInputStream();
}
}
2.URLConnection
**/**
* 抽象类 URLConnection 是示意应用程序和 URL 之间的通信链接的所有类的超类。这个类的一个实例能够被用来读或写被这个URL援用的资源。
* 通常,创立一个URL的连贯是多重步骤的过程:
* openConnection() -> connect()
* 1、当在一个URL对象调用openConnection,coonnection 对象被创立
* 2、设置参数和个别申请属性被操纵。
* 3、应用 connect 办法建设与近程对象的理论连贯。
* 4、远端对象变为可用。远端对象的头信息、字段和内容能够被获取。
* 设置参数能够通过以下办法被批改:
* setAllowUserInteraction
* setDoInput
* setDoOutput
* setIfModifiedSince
* setUseCaches
* 能够应用以下办法批改通用申请属性:
* setRequestProperty
* AllowUserInteraction 和UseCaches 参数的默认值能够通过setDefaultAllowUserInteraction和setDefaultUseCaches 来设置。
* 以上每一个set办法有一个对应的get办法来获取参数或个别申请属性的值。
* 以下办法在和远端通信对象创立后用来获取头、字段和内容:
* getContent
* getHeaderField
* getInputStream
* getOutputStream
* 一些特定的头字段被经出获取,包含:
* getContentEncoding
* getContentLength
* getContentType
* getDate
* getExpiration
* getLastModifed
* 提供了不便的获取这些字段的办法。
* getContentType办法被getContent办法用来判断近程对象的类型;子类可能会发现重写 getContentType 办法很不便。
* 在常见状况下,能够疏忽所有预连贯参数和个别申请属性:预连贯参数和申请属性默认为正当值。
* 对于这个接口的大多数客户端来说,只有两个乏味的办法:getInputStream 和 getContent,它们通过便当办法镜像到 URL 类中。
* 调用close()的办法InputStream或OutputStream一个的URLConnection的申请后,可能开释与此实例相关联的网络资源,除非特定的协定标准为其指定不同的行为。
*/
public abstract class URLConnection {
}**
3. URLStreamHandler
/**
* 此抽象类是所有流协定解决治理类的通用父类。一个流协定的handler晓得怎么去为一个特定协定创立一个连贯,比方:http https
*大多数状况,URLStreamHandler 子类的实例是不会被利用间接创立的。相同,当结构一个URL的时候,第一次协定的被遇到,失当的流协定handler 被主动加载。
*/
public abstract class URLStreamHandler {
/**
* 为被URL参数援用的对象关上一个连贯,这个办法应该被子类重写。
*如果对于handler的协定,存在一个公共的、专门的URLConnection子类属于以下包之一或其子包之一:java.lang \ java.io\ java.util\java.net,返回的这个连贯将会是这个子类。例如:
*对于HTTP 协定,一个HttpURLConnection 会被返回,JAR协定的话则JarURLConnection 会被返回。
*/
abstract protected URLConnection openConnection(URL u) throws IOException;
}
java 的正文写的十分棒,通过正文咱们就大抵理解了URL资源在java 中如何读写,理解了在java如何实现自定义的一中URL的协定的读写,比方JAR协定,能够去看一下怎么通过jar加载class 及相干内容的。
发表回复