我使用以下代码合并了两个url。
String strUrl1 = "http://www.domainname.com/path1/2012/04/25/file.php";
String arg = "?page=2";
URL url1;
try {
url1 = new URL(strUrl1);
URL reconUrl1 = new URL(url1,arg);
System.out.println(" url : " + reconUrl1.toString());
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
我对结果感到惊讶:http://www.domainname.com/path1/2012/04/25/?page=2
我希望它是(浏览器做什么):http://www.domainname.com/path1/2012/04/25/file.php?page=2
关于构造函数URL(URL上下文,String规范)的Tha javadoc解释它应该尊重RFC。
我做错了什么?
由于
更新:
This is the only problem I encountered with the fonction.
The code already works in all others cases, like browser do
"domain.com/folder/sub" + "/test" -> "domain.com/test"
"domain.com/folder/sub/" + "test" -> "domain.com/folder/sub/test"
"domain.com/folder/sub/" + "../test" -> "domain.com/folder/test"
...
答案 0 :(得分:2)
您始终可以先合并String,然后根据合并的String创建URL。
StringBuffer buf = new StringBuffer();
buf.append(strURL1);
buf.append(arg);
URL url1 = new URL(buf.toString());
答案 1 :(得分:1)
尝试
String k = url1+arg;
URL url1;
try {
url1 = new URL(k);
//URL reconUrl1 = new URL(url1,arg);
System.out.println(" url : " + url1.toString());
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
答案 2 :(得分:1)
我还没有通读the RFC,但是上下文(如URL的Java文档中所述)可能是URL的目录,这意味着
的背景"http://www.domainname.com/path1/2012/04/25/file.php"
是
"http://www.domainname.com/path1/2012/04/25/"
这就是为什么
new URL(url1,arg);
产量
"http://www.domainname.com/path1/2012/04/25/?page=2"
“解决方法”显然是使用+
自行连接各个部分。
答案 3 :(得分:1)
您正在使用此处的URL构造函数,该参数的参数为URL(URL context, String spec)
。所以你不要传递带有URL的php页面,而是传递字符串。上下文需要是目录。正确的方法是
String strUrl1 = "http://www.domainname.com/path1/2012/04/25";
String arg = "/file.php?page=2";
URL url1;
try {
url1 = new URL(strUrl1);
URL reconUrl1 = new URL(url1,arg);
System.out.println(" url : " + reconUrl1.toString());
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
答案 4 :(得分:0)
试试这个
String strUrl1 = "http://www.domainname.com/path1/2012/04/25/";
String arg = "file.php?page=2";
URL url1;
try {
url1 = new URL(strUrl1);
URL reconUrl1 = new URL(url1,arg);
System.out.println(" url : " + reconUrl1.toString());
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
答案 5 :(得分:0)
当您阅读java文档时,它会提到指定URL的上下文 哪个是域名和路径:
"http://www.domainname.com" + "/path1/2012/04/25/"
"file.php"
被认为是上述背景所属的文本
这个两个参数重载的构造函数使用URL的上下文作为基础,并添加第二个参数来创建一个完整的URL,这不是你需要的。
所以最好将String添加两部分,然后从中创建URL:
String contextURL = "http://www.domainname.com/path1/2012/04/25/";
String textURL = "file.php?page=2";
URL url;
try {
url = new URL(contextURL);
URL reconUrl = new URL(url, textURL);
System.out.println(" url : " + reconUrl.toString());
} catch (MalformedURLException murle) {
murle.printStackTrace();
}