我想URI的使用JDK建立java.net.URI中 。
我想追加绝对URI对象,查询(在字符串)。 在例如:
URI base = new URI("http://example.com/something/more/long");
String queryString = "query=http://local:282/rand&action=aaaa";
URI query = new URI(null, null, null, queryString, null);
URI result = base.resolve(query);
理论(或什么,我认为)是这种决心应该返回:
http://example.com/something/more/long?query=http://local:282/rand&action=aaaa
但我得到的是:
http://example.com/something/more/?query=http://local:282/rand&action=aaaa
为什么#resolve() “吃”最后的路径? 如果新的URI( query
)被构建为:
URI query = new URI(null, null, base.getPath(), queryString, null);
它工作得很好。
我想对自己作出回应。 真正的Javadoc正确解释。 由于URI#解析()说,在第3.B:
否则,给定URI的路径是相对的,因此新的URI的路径是通过解析给定的URI的此URI的路径的路径计算。 这是通过连接所有,但此URI的路径的最后一段,如果有的话,给定URI的路径,然后就像调用的标准化的方法正常化的结果进行。
所以....我没有正确读取。 我应该删除对此有何反应? 还是让它通过自己responsed?
第一种情况:
base = http://example.com/something/more/long
而query
结果为是
query = ?query=http://local:282/rand&action=aaaa.
根据方法的文档public URI resolve(URI uri)
它解决了对基本URI查询URI。 而如果解决方法发现在查询URI路径,将其分配给新的解决URI相同的路径。 在这种情况下,不存在与关联路径query
。 如果你看到的下面摘录resolve()
函数,它会变得更加清晰。
//片段
String cp = (child.path == null) ? "" : child.path;
if ((cp.length() > 0) && (cp.charAt(0) == '/')) {
// 5.2 (5): Child path is absolute
ru.path = child.path;
} else {
// 5.2 (6): Resolve relative path
ru.path = resolvePath(base.path, cp, base.isAbsolute());
}
其中,CP是孩子(在你的情况下,查询路径)。 由于这里的空,流量进入其他环路,将解决查询是从基本URI分配有一个路径。
你的新的URI有这个路径/something/more/
,因为它去掉最后一个“/”字符后的一切。
第二种情况:
基= http://example.com/something/more/long和query
的计算结果为是
query = /something/more/long?query=http://local:282/rand&action=aaaa
这里它去,如果环路指定查询路径,以新的URI的路径。 查询URI路径是/something/more/long
在这里,即它包括“长”的值也是如此。 可能这是他们如何解析URI的。 仔细查看的文档,你将有它一个更清晰的概念。