• URL and URI


    Uniform Resource Identifier (URI) − 对任何抽象或物理资源进行完整标识的字符序列。

    Resource Locator (URL) − 除了标识资源可用的位置之外,URI的一个子集描述了访问该资源的主要机制。

    所以,URL是URI的子集

    所有URI,不管其是否为URL,需遵循形式:scheme:[//authority][/path][?query][#fragment]

    scheme − 对于 URL, 是访问资源的协议名称;对其他URI,是分配标识符的规范的名称
    authority − 可选的组成用户授权信息部分,主机及端口(可选)
    path − 用于在scheme和authority内标识资源
    query − 与路径一起的附加数据用于标识资源。对于url是查询字符串
    fragment − 资源特定部分的可选标识

    为了方便地识别特定的URI是否是URL,我们可以检查它的scheme。每个URL都必须从以下scheme开始:ftp、http、https、gopher、mailto、news、nntp、telnet、wais、file或prospero。如果不是以此开头,则不是URL。

    URI组件:

    该类是不可变类(Instances of this class are immutable),提供了用于从其组成部分或通过解析其字符串形式创建 URI 实例的构造方法、用于访问实例的各个不同组成部分的方法,以及用于对 URI 实例进行规范化、解析和相对化的方法。
    在java的uri类中,将URI字符串分为绝对RUI和相对URI,或者不透明URI(opaque uri)和分层URI(hierarchical uri)。其中,不透明 URI 为绝对 URI,且不透明的URI无法解析,例如:mailto:java-net@java.sun.com   、news:comp.lang.java、urn:isbn:096139210x,而分层URI即可以为绝对URI,也可以是相对URI,例如http://java.sun.com/j2se/1.3/ 是绝对URI,而../../../demo/jfc/SwingSet2/src/SwingSet2.java是相对URI。
    常用方法:
    URI normalize()    //规范化此URI的路径。(规范化: 将分层 URI 的路径组成部分中的不必要的 "." 和 ".." 部分移除的过程。每个 "." 部分都将被移除。".." 部分也被移除,除非它前面有一个非 ".." 部分。规范化对不透明 URI 不产生任何效果。)
    URI relativize(URI uri)    //根据此 URI 将给定 URI 相对化。
    URI parseServerAuthority()    //尝试将此 URI 的授权组成部分(如果已定义)解析为用户信息、主机和端口组成部分。
    URI resolve(URI uri)    //根据此 URI 解析给定的 URI。
    URI resolve(String str)    //解析给定的字符串,然后在此 URI 的基础上构造一个新的 URI。 此方法与进行 resolve(URI.create(str)) 的作用相同。
    URL组件:
    提供了解析URL的功能,可以将URL解析成一个结构化的数据,并提供了简单的查找主机和打开到指定资源的连接之类的网络 I/O 操作。
    示例:
    URL url = new URL("http://www.baidu.com");
    //打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。
    InputStream in = url.openStream();// 其内部也调用了openConnection()
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len = -1;
    // 读取内容不含响应头
    while ((len = in.read(buffer)) != -1)
    {
       output.write(buffer, 0, len);
    }
    System.err.println(new String(output.toByteArray()));
  • 相关阅读:
    javaweb基础(33)_jdbc的crud操作
    javaweb基础(32)_jdbc学习入门
    javaweb基础(31)_国际化(i18n)
    javaweb基础(30)_EL函数库
    javaweb基础(29)_EL表达式
    javaweb基础(28)_jstl的核心标签
    javaweb基础(27)_jsp标签库实例
    javaweb基础(26)_jsp标签库开发二
    javaweb基础(25)_jsp标签实例一
    选择之难
  • 原文地址:https://www.cnblogs.com/djh222/p/10550874.html
Copyright © 2020-2023  润新知