【问题标题】:java.net.URL and relative urljava.net.URL 和相对 url
【发布时间】:2011-06-02 18:40:39
【问题描述】:

我的 URL 和相对路径(查询)有问题。我编写这段代码是为了从相对 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

为什么 URL 的结果与 FireFox 不同?如何像 FireFox 那样构建 URL?

【问题讨论】:

  • 是的,Firefox 或任何其他浏览器。

标签: java url relative-path


【解决方案1】:

阅读 URL(URL context, String spec) 的 javadoc 可为您的问题提供最佳答案:

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

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

由于您的 URL 上下文 URL 以不带斜线结尾,因此将被删除。

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

【讨论】:

  • 我正在制作站点地图。我需要下载每个页面并从中提取所有 url(a href)。网址不同 - 以 ?、/、./、../、absolute 等开头。需要全部处理。对不起,我没有得到你的最佳答案。在我的示例网址中以“?”开头(这是查询部分)。
【解决方案2】:

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

描述包含解决方法。

【讨论】:

  • 谢谢。我看到我的任务没有现成的解决方案。我将移植我自己的 C++ 代码。
猜你喜欢
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
相关资源
最近更新 更多