IT兄弟连 JavaWeb教程 URI、URL
URI介绍
URI(Uniform Resource Identifier),是统一资源标识符的缩写,是一个用于标识某一个Web资源名称的字符串,该标识允许用户对任何资源通过特定的协议进行交互。Web上可用的每种资源,如:HTML、图像、视频和音乐等资源,都由一个统一资源标识符进行标识。URI一般由三部分组成:
● 访问资源的命名机制
● 存放资源的主机名
● 资源自身的名称,由路径标识,着重强调于资源
URL介绍
URL(Uniform Resource Locator),统一资源定位符的缩写,URL是一种特殊类型的URI,包含了用于查找某个资源的全部信息。URL一般由三部分组成:
● 协议类型
● 主机的IP地址(可以包含端口号)
● 资源路径
HTTP之URL
HTTP使用统一资源定位符URL来传输数据和建立连接,以下面这个URL为例,为大家介绍下URL的各部分组成:
http://www.itxdl.cn:8080/news/index.jsp?boardID=5&ID=24618&page=1#name
从上面的URL中可以看出,一个完整的URL包括以下几部分:
● 协议部分:该URL的协议部分为“http”,这代表网页使用的是HTTP协议,在Web中可以使用多种协议,如HTTP、FTP等等,在协议后面的“//”为分隔符。
● 域名部分:该URL的域名部分为www.itxdl.cn。一个URL中,也可以使用IP地址作为域名使用。
● 端口部分:跟在域名后面的是端口号,域名和端口号之间使用“:”作为分隔符。端口号不是一个URL必须的部分,如果省略端口号部分,将采用默认端口号。
● 虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分,本例中的虚拟目录是“/news/”。
● 文件名部分:从域名后的最后一个“/”开始到“?”位置,是文件名部分,如果没有“?”,则从域名后的最后一个“/”开始到“#”位置,是文件名部分,如果没有“?”和“#”,那么从域名的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.jsp”。文件名也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名。
● 锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分。
● 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
URL编码
如果一样东西需要编码,那么就说明这样的东西并不适合进行传输。原因是多种做样的,如长度过大,包含隐私数据等,对于URL来说,之所以要进行编码,是因为URL中有些字符会引起歧义。
例如,URL中的参数使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如username=snape&password=123,但是如果value中的字符串包含了=或&,那么一定会造成接收URL的服务器解析错误,因此必须将引起歧义的字符进行转义,也就是进行编码。
又如,URL中的编码格式采用的是ASCII码,而不是Unicode,也就是说不能在URL中包含任何非ASCII字符,例如中文。
在URL中是使用百分号编码的形式对中文进行编码的,因为使用百分号编码的方式非常简单,使用%加上两位十六进制数值即可。URL编码默认使用的字符集是US-ASCII,例如a在US-ASCII码中对应的十六进制形式是0x61,那么URL编码之后得到的就是%61,我们在浏览器地址栏中输入https://www.baidu.com/s?wd=%61,实际上就等同于在百度中搜索a了。
对于非ASCII字符,需要使用ASCII字符集的超集进行编码得到相应的十六进制数值,然后对每个字符执行百分号编码。对于Unicode字符,使用utf-8对其进行编码得到相应的十六进制数值,然后对每个字节执行百分号编码,如“中文”使用utf-8字符集得到的十六进制形式为“0xE4 0xB8 0xAD 0xE6 0x96 0x87”,经过“URL”编码之后得到"%E4%B8%AD%E6%96%87"。
IT兄弟连 JavaWeb教程 URI、URL的更多相关文章
- IT兄弟连 JavaWeb教程 文件下载技术
● 列出提供下载的文件资源 我们要将Web应用系统中的文件资源提供给用户进行下载,首先我们要有一个页面列出上传文件目录下的所有文件,当用户点击文件下载超链接时就进行下载操作,编写一个ListFile ...
- IT兄弟连 JavaWeb教程 Servlet API
Java Servlet是运行在带有支持Java Servlet规范的解释器的web服务器上的Java类. Servlet可以使用javax.servlet和javax.servlet.http包创建 ...
- IT兄弟连 JavaWeb教程 AJAX常见问题
1 中文乱码问题 ● POST提交乱码 乱码原因:所有浏览器对Ajax请求参数都使用UTF-8进行编码,而服务器默认使用ISO-8859-1去解码,所以产生乱码. 解决方法:在服务器接收请求参数前 ...
- IT兄弟连 JavaWeb教程 过滤器1
Servlet过滤器是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强,监听器可以监听到Web应用程序启动和关闭.创建过滤器和监听器需要继承相应接口,并对其进行配置. ...
- IT兄弟连 JavaWeb教程 使用JSTL函数
在JSTL Functions标签库中提供了一组常用的EL函数,主要用于处理字符串,在JSP中可以直接使用这些函数. 在JSP中使用Functions标签库,需要通过taglib指令引入该标签库: & ...
- IT兄弟连 JavaWeb教程 JSP中的三大指令
指令标识主要用于设定整个JSP页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何内容输出到网页中.也就是说,指令标识对于客户端浏览器是不接见的.JSP页面的指令标识与我们的身份证类似, ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie常用方法
以下是在Servlet中操作Cookie时可使用的有用的方法列表 ● public void setDomain(String pattern) 该方法设置cookie适用的域,例如 itxdl.c ...
- IT兄弟连 JavaWeb教程 ServletContext对象
ServletContext是Servlet与Servlet容器之间直接通信的接口.Servlet容器在启动一个Web应用时,会为它创建一个ServletContext对象.每个Web应用都有唯一的S ...
- IT兄弟连 JavaWeb教程 Servlet表单数据
很多情况下,需要传递一些信息,从浏览器到Web服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到Web服务器,分别为GET方法和POST方法. 1.GET方法 GET 方法向页面请求发送已编 ...
随机推荐
- hdu 2795(单点改动)
题意:有h×w大的公告板.有n条公告要写入,每条公告高度都是1,宽度是wi,每次从最上最左的空位写,假设有空位输出第几行.假设没有足够空位输出-1. 题解:注意h最大1e9.但事实上是看n的大小.由于 ...
- 怎样使用ListView?
怎样使用ListView? watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFC ...
- PHP读取excel(4)
这一小节内容主要是PHPExcel读取少量excel数据,具体代码如下: <?php //数据较少的时候,一次性读取出来放到数组里 header("Content-Type:text/ ...
- ShopMall
https://github.com/KingsleyYau/ShopMall-Android https://github.com/KingsleyYau/ShopMall-iOS https:// ...
- VUE清除组件内部定时器
定时器如果不手动清除,只会在离开当前页面或者F5刷新后才会清除.由于vue项目是SPA应用,离开当前组件后并不会清除定时器,所以需要我们手动去清除定时器.但当我们将清除定时器clearInterval ...
- jquery easyui:EasyUI Treegrid 树形网格
用jquery easyui 的 Treegrid 树形网格 进行数据展示,不过官网的API 和 demo 让我愣了好久,摸索后整理出来供大家详细参看. jquery easyui 官网:http:/ ...
- 获取Bootstrap-Table的所有内容,修改行内容
var allTableData = $tableLeft.bootstrapTable('getData');//获取表格的所有内容行 var flag = false; for( i=0;i< ...
- dubbo简单配置与使用
dubbo简介 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时 ...
- 通过反射调用一个单列的方法(单列必须有“getInstance”方法)
Class<?> _clazz = Class.forName(_clazzName); if (_clazz != null) { Method _getInstance = _claz ...
- 闭包传参 余额计算 钩子hook 闭包中的this JavaScript 钩子
闭包传参 余额计算 钩子hook 小程序 a=function(e){console.log(this)}() a=function(e){console.log(this)}() VM289 ...