Java中的URL格式

时间:2011-10-15 16:37:57

标签: java

String arg="http://www.example.com/user.php?id=<URLRequest Method='GetByUID' />";
java.net.URI uri = new java.net.URI( arg );
java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
desktop.browse( uri );

我想在默认浏览器中使用上面的代码打开给定的链接,但它说url无效...我尝试转义字符,如'但是它不起作用。 如果我替换String arg =“www.google.com”;然后没有问题,我可以打开google.com。 请帮忙。

3 个答案:

答案 0 :(得分:3)

根据RFC 2396,您的字符串包含URI中无效的字符。您需要正确编码查询参数。许多实用程序都支持此功能,例如标准URLEncoder(较低级别),JAX-RS UriBuilderSpring UriUtils,Apache HttpClient URLEncodedUtils等。

编辑:哦,URI类也可以处理它,但你必须使用different constructor

URI uri = new URI("http", "foo.com", null, "a=<some garbage>&b= |{$0m3 m0r3 garbage}| &c=imokay", null);
System.out.println(uri);

输出:

http://foo.com?a=%3Csome%20garbage%3E&b=%20%7C%7B$0m3%20m0r3%20garbage%7D%7C%20&c=imokay

虽然丑陋,但却是正确的表现形式。

答案 1 :(得分:2)

那是因为 无效。 <URLRequest Method='GetByUID' />应替换为id的值,或者返回可以与id字符串连接的arg的表达式。像

这样的东西

String arg="http://www.example.com/user.php?id="+getByUID(someUid);

答案 2 :(得分:1)

import java.net.URL;
import java.net.URLEncoder;

class ARealURL {
    public static void main(String[] args) throws Exception {
        String s1 = "http://www.example.com/user.php?id=";
        String param = "<URLRequest Method='GetByUID' />";
        String encodedParam = URLEncoder.encode(param,"UTF-8");

        URL url = new URL(s1+encodedParam);
        System.out.println(url);
    }
}

输出

http://www.example.com/user.php?id=%3CURLRequest+Method%3D%27GetByUID%27+%2F%3E