URL的全称是Uniform Resource Locator,意思是统一资源定位符,俗称网络地址或网址。网络上的每个文件及接口,都有对应的URL网址,它规定了其他设备如何通过一系列的路径找到自己,犹如网购的包裹一路送至收货地址所描述的地点。现实生活中的通讯地址,一般遵循固定的格式,比如“××省××市××区××小区×××”;网络地址也有相应的命名规则,比如新华网的首页地址为“http://www.news.cn”,当然该地址比较简单,还能造出更复杂的URL如“http://www.news.cn:8080/Public/GetValidateCode?time=123#index”(该网址纯属虚构)。虽然普通用户平时上网只消打开网页接着在各类链接之间跳来跳去,但是作为程序员必须弄清楚这些链接地址的格式涵义,这样才能学好网络通信的编程开发。仍以网址“http://www.news.cn:8080/Public/GetValidateCode?time=123#index”为例,该URL包含了网络地址的各项组成部分,具体细节如下图所示。

接下来对上图的URL字符串补充详细说明,从左到右依序介绍如下:
1、最开头的http表示该地址采用的网络协议,它的全称是“Hypertext Transfer Protocol”,意思是超文本传输协议。除了http,常见的网络协议还有https、ftp、file、telnet等等。
2、协议后面越过两个斜杆,紧跟着的是该网址所在的域名,也叫主机名称。这块早已为大众所熟知,除了新华网的http://www.news.cn,还有中央电视台的http://www.cctv.com、人民日报的http://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);

好了 今天的分享就这么多,希望可以帮助到大家的学习,同时大家觉得不错的话一定要推荐给身边的朋友哦。

java ftp获取文件名的方法_小猿圈Java学习-URL地址的组成格式相关推荐

  1. java request 处理过程_小猿圈Java开发之从代码看spring mvc请求处理过程

    原标题:小猿圈Java开发之从代码看spring mvc请求处理过程 Java作为编程界的常青树,有自己生存的独到之处,小猿圈java讲师今天就分享一个关于从代码看spring mvc请求处理过程,通 ...

  2. 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏

    对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...

  3. java list 元素去重_小猿圈Java开发之list按照元素某个字段去重详解

    小猿圈Java老师给大家分享一篇关于如何实现Java8中list按照元素的某个字段去重的详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧. ...

  4. java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏

    对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...

  5. 判断三角形java代码_小猿圈Java循环嵌套语法的使用介绍

    Java是一直被程序员使用的程序之一,而且应用也是最广泛的一个,很多应用中都会用得到,小猿圈java讲师就为你介绍一下Java循环嵌套语法的使用介绍,希望对你有所帮助. 嵌套循环是指在一个循环语句的循 ...

  6. java while语句打印三角形_小猿圈Java循环嵌套语法的使用介绍

    Java是一直被程序员使用的程序之一,而且应用也是最广泛的一个,很多应用中都会用得到,小猿圈java讲师就为你介绍一下Java循环嵌套语法的使用介绍,希望对你有所帮助. 嵌套循环是指在一个循环语句的循 ...

  7. 小猿圈python视频_小猿圈分享学习Python的最佳方式

    原标题:小猿圈分享学习Python的最佳方式 python现在是世界上功能最多的编程语言之一,可以是用Python编辑应用程序,游戏.算法程序.还可以编程一个机器人,学习Python可以担任软件工程师 ...

  8. 小猿圈python金角大王_小猿圈python学习-基本数据类型

    小猿圈python学习-基本数据类型 2019-04-24 11:16:14 1点赞 6收藏 0评论 什么是数据类型? 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大, ...

  9. java gc 有钱人_小猿圈java之GC垃圾回收机制

    垃圾回收机制是提高性能的重要机制,所以不管学什么语言也好,垃圾回收机制都是有的,也是很重要的,小猿圈这章详解一下java的GC垃圾回收机制,需要用的或者感兴趣的朋友们,可以跟着小编学习一下. 一.GC ...

最新文章

  1. php绘图技术加水印,PHP图片添加水印功能示例小结
  2. element表格里面放图片_Element UI table里上传图片后如何显示在表格里
  3. Gemini论文笔记
  4. Spark-shell提示找不到路径
  5. 【渝粤教育】国家开放大学2018年秋季 1317T社会工作行政(本) 参考试题
  6. mysql 参照完整性规则_mysql参照完整性
  7. postgres 禁止远程登录_解决postgresql无法远程访问的情况
  8. Openssl s_server命令
  9. 如何在 Mac 上将PDF 转换为 Word?
  10. (转)金融从业者将被人工智能取代?
  11. a letter and a number
  12. 考研数学刷题视频资料
  13. c语言仿ce内存搜索工 源代码_仿CE内存搜索工具的全部功能
  14. 【国产】TASKCTL批量作业调度统一图形监控运维平台
  15. 二叉树前中后序遍历(循环实现)
  16. 数学建模竞赛常用软件培训1
  17. 电影评论分类:二分类问题(IMDB数据集)
  18. 本地虚拟机搭建k8s集群完整篇
  19. temp = (temp 0x55555555) + ((temp 0xaaaaaaaa) 1)
  20. 断舍离的难处-less is more

热门文章

  1. 批量执行命令(SSH)
  2. BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理
  3. Hive安装与配置MySQL元数据库
  4. Leetcode--424. 替换后的最长重复字符
  5. mysql怎么禁止远程连接_mysql如何设置禁止远程连接
  6. 全国网络教育统考计算机应用基础题目精选,全国网络教育统考计算机应用基础题目精选解析.doc...
  7. a4b5笔记本大小对比_天津订做笔记本*价格多少【广通印务】
  8. pytorch自定义卷积核权值参数
  9. 私有private成员和保护protected成员的区别
  10. Python绘制决策树的节点