【问题标题】:Construct incorrect URLs in java with java.net.URL?使用 java.net.URL 在 java 中构造不正确的 URL?
【发布时间】:2016-01-25 18:37:37
【问题描述】:

使用 oracle java 1.8.0_25

我有以下构造

URL url = new URL(new URL(new URL("http://localhost:4567/"), "123"), "asd")

根据https://docs.oracle.com/javase/tutorial/networking/urls/creatingUrls.html中的文档
它应该产生http://localhost:4567/123/asd的URL
但它会产生http://localhost:4567/asd

文档说明

此代码 sn-p 使用 URL 构造函数,该构造函数允许您从另一个 URL 对象(基础)和相对 URL 规范创建 URL 对象。这个构造函数的一般形式是:

URL(URL baseURL, String relativeURL)
第一个参数是一个 URL 对象,它指定新 URL 的基础。第二个参数是一个字符串,它指定相对于基础的资源名称的其余部分。如果 baseURL 为 null,则此构造函数将 relativeURL 视为绝对 URL 规范。相反,如果 relativeURL 是绝对 URL 规范,则构造函数会忽略 baseURL。

这是正确的行为吗?

【问题讨论】:

  • 根据文档:URL url = new URL("http", "localhost", 4567, "123/asd")?
  • 通过添加来自文档的引用文本来编辑问题。也有例子。

标签: java url java-8 construction


【解决方案1】:

使用此构造函数阅读文档后:

URL(URL baseURL, String relativeURL)

所以你可以这样做:

URL baseUrl = new URL("http://localhost:4567/");
URL url = new URL(baseUrl, "123/asd")

或者您可以将其作为单线:

URL url = new URL(new URL(new URL("http://localhost:4567/"), "123/"), "asd");

输出

http://localhost:4567/123/asd

【讨论】:

  • 我编辑了我的答案。在123 之后,你错过了/
  • 我的意思是在任何地方都没有斜杠。毕竟,在构造 URL 时不必担心斜线。
  • @George 是的,我明白你的意思。奇怪的是它不能那样工作。
  • @George:我想,如果基础URLhttp://host/path/index.html,每个人都会同意,针对它解析相对URL about.html,应该导致http://host/path/about.html 而不是http://host/path/index.html/about.html .由于规则不关心名称是index.html vs path 还是123 vs asd,有什么区别? → 尾部斜线(或不存在)...
猜你喜欢
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多