关于java:javanetURL-记录

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理