java.net.URL和相对url

时间:2011-01-03 09:45:49

标签: java url relative-path

我遇到了网址和相对路径(查询)的问题。我写了这段代码来从相对url获取绝对url:

    old = "http://domain/script?param";
    new_ = "?otherparam";
    URL u = new URL(old);
    u = new URL(u,new_);

这是输出:

JAVA URL: http://domain/script?param + ?otherparam = http://domain/?otherparam
FireFox: http://domain/script?param + ?otherparam = http://domain/script?otherparam

为什么网址的结果与FireFox不同?如何构建像FireFox一样的URL呢?

2 个答案:

答案 0 :(得分:3)

Java中的BUG#6519518:URL incorrectly removes path leaf when the relative spec is query only (RFC1808)

说明中包含一种解决方法。

答案 1 :(得分:1)

阅读 URL(URL上下文,字符串规范)的javadoc可以为您的问题提供最佳答案:

  

如果规范的路径组件以斜杠字符“/”开头,则路径将被视为绝对路径,规范路径将替换上下文路径。

     

否则,路径将被视为相对路径,并附加到上下文路径,如RFC2396中所述。此外,在这种情况下,通过删除由“..”和“。”出现的目录更改来规范化路径。

由于您的网址背景网址没有斜线,因此会被删除。

尝试添加斜杠:old = "http://domain/script/?param";