URI 类在某些特定情况下对其组成字段执行转义。建议使用 URI 管理 URL 的编码和解码,并使用 toURI() 和 URI.toURL() 实现这两个类之间的转换

解决方案 »

  1.   

    针对 URI 实例的运算 
    此类支持的主要运算有规范化、解析 和相对化 运算。 
    规范化 是将分层 URI 的路径组成部分中的不必要的 "." 和 ".." 部分移除的过程。每个 "." 部分都将被移除。".." 部分也被移除,除非它前面有一个非 ".." 部分。规范化对不透明 URI 不产生任何效果。 解析 是根据另一个基本 URI 解析某个 URI 的过程。得到的 URI 由两个 URI 组成部分构造,构造方式由 RFC 2396 指定,从基本 URI 取出原始 URI 中未指定的组成部分。对于分层 URI,原始的路径根据基本路径进行解析,然后进行规范化。例如,解析以下 URI docs/guide/collections/designfaq.html#28          (1) 
    根据基本 URI http://java.sun.com/j2se/1.3/ 解析,结果为 URI 
    http://java.sun.com/j2se/1.3/docs/guide/collections/designfaq.html#28 
    解析相对 URI 
    ../../../demo/jfc/SwingSet2/src/SwingSet2.java    (2) 
    根据此结果应生成 
    http://java.sun.com/j2se/1.3/demo/jfc/SwingSet2/src/SwingSet2.java 
    支持对绝对和相对 URI,以及分层 URI 的绝对和相对路径的解析。根据任何其他 URI 对 URI file:///~calendar 进行解析只能生成原始的 URI,因为它是绝对路径。根据相对基础 URI (1) 解析相对 URI (2) 将生成规范的但依然是相对的 URI 
    demo/jfc/SwingSet2/src/SwingSet2.java 
    最后,相对化 是解析的逆过程:对于任何两个规范的 URI u 和 v, u.relativize(u.resolve(v)).equals(v)  和
    u.resolve(u.relativize(v)).equals(v)。此运算在下面的场合非常有用:构造一个包含 URI 的文档,该 URI 必须尽可能是根据文档的基本 URI 建立的相对 URI。例如,相对化 URI 
    http://java.sun.com/j2se/1.3/docs/guide/index.html 
    根据基本 URI 
    http://java.sun.com/j2se/1.3 
    生成了相对 URI docs/guide/index.html
      

  2.   

    String base = "http://www.hao123.com";
    String reference = "book.html";
    URI baseUri = new URL(base.trim()).toURI();
    URI uri = new URL(reference.trim()).toURI();
    System.out.println(baseUri.resolve(uri).toString());
    //http://www.hao123.combook.html这样报错  no protocol: book.html
    楼主你贴文档啊
    我看了文档,但没办法解决
      

  3.   


    String base = "http://www.hao123.com";
            String reference = "book.html";
            URL url;
            try
            {
                url = new URL(new URL(base), reference);
                System.out.println(url);
                
            }
            catch (MalformedURLException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
      

  4.   

    你看URL文档就行了。
    主要看构造函数那块,那里又描述的
    我在贴文档,给你看哈context - 要在其中解析规范的上下文。   这个就相当于你的基本路径
    spec - 将作为 URL 解析的 String。      这个就相当于你的相对路径他们组合就是绝对路径URL了
      

  5.   

    没看懂你要说什么?
    http://www.hao123.com/book.html没啥特殊的 
      

  6.   

    String base = "http://www.hao123.com";
            String reference = "/book.html";
            URI    baseUri = new URI(base.trim());
            URI        uri = new URI(reference.trim());
            System.out.println(baseUri.resolve(uri).toString());
    打开源文件看下,网页的相对路径前面都有"/",这样绝对路径就对了.
      

  7.   

    根据此 URI 将给定的 URI 相对化按以下方式计算: 如果此 URI 或给定 URI 是不透明的,或者如果两个 URI 的方案和授权组成部分不相同,或者如果此 URI 的路径不是给定 URI 的路径前缀,则返回给定的 URI。 否则,使用从给定 URI 获取的查询和片段组成部分,以及通过把此 URI 的路径从给定 URL 的路径开头处移除而得到的路径组成部分,构造新的相对分层 URL。