接下来对上图的URL字符串补充详细解释,从左到右依序先容如下:
1、最开头的http表示该地址采取的网络协议,它的全称是“Hypertext Transfer Protocol”,意思是超文本传输协议。除了http,常见的网络协议还有https、ftp、file、telnet等等。
2、协议后面超越两个斜杆,紧随着的是该网址所在的域名,也叫主机名称。这块早已为大众所熟知,除了新华网的www.news.cn,还有中心电视台的www.cctv.com、公民日报的www.people.com.cn等等。
3、域名后面以冒号隔开的数字叫做端口号,像http协议默认的端口号是80。如果该网址采纳默认的端口,就不必写明端口数字;如果该网址利用了非默认的端口,比如http做事搭建在8080端口之上,就必须在URL中写明8080。
4、域名加上端口号,组成了URL的授权部分,即网址的入口。
5、授权部分的右边包括斜杆在内、问号之前的一长串字符,表示详细的网络路径,犹如操作系统里面的文件目录。
6、问号之后、井号之前的部分,因此等号隔开的要求参数,各参数之间以“&”分隔,详细魄式形如“参数A名称=A参数值&参数B名称=B参数值&参数C名称=C参数值”。要求参数中的参数值许可变革,网络做事将按照指定的数值返回相应的结果数据。
7、网络路径加上要求参数,组成了URL的文件名称,有了文件名就能访问该URL所表达的网络资源。
8、井号之后的字串为引用位置,假设一个网页很长很长,打开后默认显示网页的顶部,造成用户下拉网页找到某块区域有点麻烦。而引用位置先给各区域做个编号,然后在URL末端带上该位置的编号,于是网页打开后会自动滚到指定位置的区域,从而方便了用户的浏览操作。
搞清楚了URL各段部分的浸染,有助于后续的网络编程事情。就网址访问而言,Java供应了同名的网址工具URL,该工具类中庸之道恰好名叫URL,其布局方法的输入参数即为网址字符串,此后的HTTP访问操作皆有赖于URL工具。URL工具常用的方法包括但不限于下列几种:
getProtocol:获取URL工具采取的网络协议。
getHost:获取URL工具的域名(主机名称)。
getDefaultPort:获取URL工具的默认端口。http协议的默认端口号是80,ftp协议的默认端口号是21,https协议的默认端口号是443。
getPort:获取URL工具的指定端口(若不显式指定则返回-1)。
getAuthority:获取URL工具的授权部门(由域名和指定端口组成)。
getPath:获取URL工具的路径(不包括域名)。
getQuery:获取URL工具的要求参数。
getFile:获取URL工具的文件名(由路径和要求参数组成)。
getRef:获取URL工具的引用位置。
openConnection:打开URL工具的网络连接,并返回URLConnection连接工具。无论是接口调用,还是上传下载,都依赖于这里的连接工具。
一个完全的网址字符串,包含了蛮多的地址信息,一个字符都错不得。自然程序员很关心网址到底有哪些校验办法,可以支持判断某个网址是合法要求还是造孽要求。首先是域名的合法性校验,Java供应了专门的网络地址工具InetAddress,调用该工具的静态方法getByName,能够得到指定域名的网络地址工具,详细的方法调用代码示例如下:
1
2
// 根据域名或IP得到对应的网络地址工具
InetAddress inet = InetAddress.getByName(host);
之后调用网络地址工具的以下方法,即可获取相应的网络地址信息:
getHostAddress:获取网络地址工具的IP地址。
getHostName:获取网络地址工具的域名。
isReachable:检讨对方主机是否能连得上。但该方法不可靠,由于可能由于存在防火墙导致返回false。
可见只管InetAddress供应了isReachable方法用于检测域名的连通性,但该方法并不总能见效。那么退而求其次,只要校验域名的格式是否精确便行;这样的话,在调用getByName方法之时,增加捕捉未知域名非常UnknownHostException;一旦捕捉到该非常,就认为当前域名是非法域名。此时域名的合法性校验代码变成了下面这样:
// 测试域名的可用信息。返回true表示域名合法,返回false表示域名造孽
private static boolean testHost(String host) {
try {
// 根据域名或IP得到对应的网络地址工具
InetAddress inet = InetAddress.getByName(host);
} catch (UnknownHostException e) { // 如果host字符串并非合法的域名/IP,则getByName方法会扔出“未知的域名非常”
e.printStackTrace();
return false; // 返回false表示该字符串不是合法的域名/IP
}
return true; // 返回true表示该字符串是合法的域名/IP
}
另一个值得把稳的地方是要求参数中的参数值编码,显然URL格式存在部分保留字符,包括冒号、斜杆、问号、井号等等,这些字符不应直接涌如今Query部分的参数值当中,故而须要对参数值里面的保留字符进行转义。常见字符对应的URL转义符如下图所示:
除了保留字符以外,中笔墨符一样须要转义,比如“你”要转为“%E4%BD%A0”。原始字符的转义过程也称作URL编码,反过来则有反转义过程,即将转义后的字符规复为原始字符,反转义过程也称作URL解码。Java同时供应了对应的URL编码工具URLEncoder,以及URL解码工具URLDecoder,个中URL编码的方法调用示例如下:
1
2
// 得到URL编码后的转义字符串
String encoded = URLEncoder.encode(origin);
URL解码的方法调用示例如下:
1
2
// 得到URL解码后的原始字符串
String origin = URLDecoder.decode(encoded);
好了 本日的分享就这么多,希望可以帮助到大家的学习,同时大家以为不错的话一定要推举给身边的朋友哦。