在 URI类中有个relative方法可以用来将uri相对化。今天开发时发现了问题,它返回的相对链接并不是我想象的那种结果——不具有正确的层次关系.
relativize
public URI relativize (URI uri)
-
根据此 URI 将给定 URI 相对化。
根据此 URI 将给定的 URI 相对化按以下方式计算:
-
如果此 URI 或给定 URI 是不透明的,或者如果两个 URI 的方案和授权组成部分不相同,或者如果此 URI 的路径不是给定 URI 的路径前缀,则返回给定的 URI。
-
否则,使用从给定 URI 获取的查询和片段组成部分,以及通过把此 URI 的路径从给定 URL 的路径开头处移除而得到的路径组成部分,构造新的相对分层 URL。
-
-
-
参数:
- uri - 要根据此 URI 进行相对化的 URI 返回:
- 得到的 URI 抛出:
- NullPointerException - 如果 uri 为 null
在官网找到了这个buglist http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6226081 ,症状在这个bug里描述得很清楚,我就不多说了.
我的测试用例如下:
import java.net.URI;
import junit.framework.TestCase;
public class LinkReplaceTest extends TestCase {
public void testLink() throws Exception {
URI i = new URI("http://localhost:8080/abc ");
URI i2 = new URI("http://localhost:8080/manager ");
assertEquals("manager", i.relativize(i2).toString());
i = new URI("/abc/");
i2 = new URI("/manager");
assertEquals("../manager", i.relativize(i2));
assertEquals(true, i.resolve(i.relativize(i2)).equals(i2));
}
}
2005年的bug,还没有解决掉,唉.!!!!!只好自己写一个了.
【2008-7】