这是服务器的绝对URI:
URI base = new URI("http://localhost/root?a=1");
这是一个相对URI:
URI rel = new URI("/child?b=5");
现在,我尝试将相对1应用于绝对对象,并接收:
URI combined = base + rel; // somehow
assert combined.equals(new URI("http://localhost/root/child?a=1&b=5"));
有没有可能用JDK或其他库来做这样的操作?
发布于 2011-11-26 02:38:17
URL mergedURL = new URL(new URL(baseUrl), relativeUrl);
要将基本URL的参数传递给合并的url,您必须通过调用URL#getQuery手动提取它们,并将它们附加到新的URL中
像这样,
String finalUrl = mergedUrl.toString() + "&" + baseUrl.getQuery();
这将需要一个if()来决定是否需要'&‘来连接它们,这取决于mergedUrl的外观。
发布于 2011-11-26 05:52:13
URI (和File)有一个接受现有URI (或File )的构造函数。
它是为相对URI创建的:
URL mergedURL = new URL(baseUrl, relativeUrl);
要合并两个文件路径,可以使用:
File mergedFile = new File(directoryFile, fileOrDir);
如果你使用mergedFile.getName()
,如果它不是一个目录,你会得到文件名。
对于URL,这是不可能的。
发布于 2011-11-26 02:58:15
丑陋,但至少在这种情况下是有效的:
URI combined = new URI( "http://" + base.getHost() + base.getPath() + rel.getPath() + "?" + base.getQuery() + "&" + rel.getQuery() );
第二个URL相对于第一个URL的要求有点奇怪,因为第一个URL包含查询字符串。第二个网址以'/‘开头,这意味着它相对于"/",而不是“/root”……您确定生成的URL吗?
https://stackoverflow.com/questions/8273019
复制相似问题