1、 URL类的构造函数
从上图只URL类有协议,用户名,密码,主机ip地址,端口号,上下文路径,参数组成,
2 字符串 和URL对象的转换。
调用URL.valueOf(String str)即可生成一个URL对象。如下面例子
URL url = URL.valueOf(“dubbo://admin:hello1234@10.20.130.230:20880/context/path?version=1.0.0&application=morgan&noValue”);
3 URL对象的解析规则
public static URL valueOf(String url) {
//字符串的值不能为空或长度为0
if (url == null || (url = url. trim ()). length () == 0) {
throw new IllegalArgumentException(“url == null”);
}
String protocol = null;
String username = null;
String password = null;
String host = null;
int port = 0;
String path = null;
Map<String, String> parameters = null;
//1 以?为分隔符,将字符串分成两部分,一部分为body,一部分为参数
int i = url.indexOf(“?”); // seperator between body and parameters
//如果含有?,表示有参数
if (i >= 0) {
//对参数的解析,以参数之间以&为分隔符
String[] parts = url.substring(i + 1).split(“\\&”);
//参数存储以map来存储
parameters = new HashMap<String, String>();
for (String part : parts) {
part = part.trim();
if (part.length() > 0) {
//参数的key和value的分隔符
int j = part.indexOf(‘=’);
if (j >= 0) {
parameters.put(part.substring(0, j), part.substring(j + 1));
} else {
//没有”=”情况下,将key当做value
parameters.put(part, part);
}
}
}
url = url.substring(0, i);
}
i = url.indexOf(“://”);
if (i >= 0) {
if(i == 0) throw new IllegalStateException(“url missing protocol: \”” + url + “\””);
protocol = url.substring(0, i);
url = url.substring(i + 3);
}
else {
// case: file:/path/to/file.txt
i = url.indexOf(“:/”);
if(i>=0) {
if(i == 0) throw new IllegalStateException(“url missing protocol: \”” + url + “\””);
protocol = url.substring(0, i);
url = url.substring(i + 1);
}
}
i = url.indexOf(“/”);
if (i >= 0) {
path = url.substring(i + 1);
url = url.substring(0, i);
}
i = url.indexOf(“@”);
if (i >= 0) {
username = url.substring(0, i);
int j = username.indexOf(“:”);
if (j >= 0) {
password = username.substring(j + 1);
username = username.substring(0, j);
}
url = url.substring(i + 1);
}
i = url.indexOf(“:”);
if (i >= 0 && i < url.length() – 1) {
port = Integer.parseInt(url.substring(i + 1));
url = url.substring(0, i);
}
if(url.length() > 0) host = url;
return new URL(protocol, username, password, host, port, path, parameters);
}