java.net.URL 记录

2年前 (2022) 程序员胖胖胖虎阿
175 0 0

有一个非常重要的类,而我对它知之甚少,它就是: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 及相关内容的。

版权声明:程序员胖胖胖虎阿 发表于 2022年11月13日 下午9:16。
转载请注明:java.net.URL 记录 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...