您的位置 首页 java

dubbo的URL总线的源代码阅读

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);

}

文章来源:智云一二三科技

文章标题:dubbo的URL总线的源代码阅读

文章地址:https://www.zhihuclub.com/170016.shtml

关于作者: 智云科技

热门文章

网站地图