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"。

原文地址:https://blog.51cto.com/14311187/2389392

时间: 2024-08-29 10:14:36

IT兄弟连 JavaWeb教程 URI、URL的相关文章

IT兄弟连 JavaWeb教程 JSP中的三大指令

指令标识主要用于设定整个JSP页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何内容输出到网页中.也就是说,指令标识对于客户端浏览器是不接见的.JSP页面的指令标识与我们的身份证类似,虽然公民身份证可以标识公民身份的,但是它并没有对所有见到过我们的人都公开. JSP指令语法 JSP指定标识的语法格式如下: <%@ 指令名 属性1="属性值1" 属性2="属性值2" ...%> 参数说明: 指令名:用于指定指令名称,在JSP中包含page.

IT兄弟连 JavaWeb教程 AJAX常见问题

1 中文乱码问题 ● POST提交乱码 乱码原因:所有浏览器对Ajax请求参数都使用UTF-8进行编码,而服务器默认使用ISO-8859-1去解码,所以产生乱码. 解决方法:在服务器接收请求参数前设置解析编码. request.setCharacterEncoding("UTF-8"); ● GET提交乱码 乱码原因:IE浏览器发送请求时,会默认使用GBK字符集对请求参数进行编码,而其他浏览器会使用UTF-8.服务器默认情况下使用的时ISO-8859-1进行解码,所以产生乱码. 解决方

IT兄弟连 JavaWeb教程 请求重定向案例

Check2Servlet类与Output2Servlet类之间为请求转发关系.在web.xml文件中,为Check2Servlet映射的URL为"/check2",为Output2Servlet映射的URL为"/outout2". public class Check2Servlet extends HttpServlet{ public void service(HttpServletRequest request, HttpServletResponse re

IT兄弟连 JavaWeb教程 JSP动作指令

JSP动作指令语法 JSP动作指令语法格式如下: <jsp:动作名 属性名1="属性值1" 属性名2="属性值2" ... %> JSP具体动作指令 ●  包含文件动作标识<jsp:include> JSP的动作标识<jsp:include>用于向当前页面中包含其他的文件.被包含的文件可以是动态文件,也可以是静态文件. <jsp:include>动作标识的语法格式如下: <jsp:include page=&qu

IT兄弟连 JavaWeb教程 EL与JSTL表达式经典案例

案例需求:使用MVC模式编写一个程序,当发起一个deptList.do请求时,在servlet中准备一个部门列表对象,把这个列表对象放入request作用域中转发到deptlist.jsp,使用JSTL+EL的语法来显示这个部门列表.部门类型是XdlDept成员变量有int id.String name.String loc. 案例实现: ●  XdlDept类: package com.xdl.bean; import java.io.Serializable; public class Xd

IT兄弟连 JavaWeb教程 异步请求对象的API

Ajax的核心是XMLHttpRequest对象(xhr),xhr为向服务器发送请求和解析服务器响应提供了接口,能够以异步的方式从服务器获取新数据. xhr的主要方法有: ● void open(String method,String url,Boolean async) 用于创建请求,参数说明如下: method:请求方式,字符串类型,如GET.POST.DELETE等. url:要请求的地址,字符串类型. async:是否异步,布尔类型,默认是true,异步的. ● void send(S

IT兄弟连 JavaWeb教程 JSON和JSON字符串

JSON (JavaScript Object Notation)是JavaScript语言中的一种对象类型.JSON的好处是易于阅读和解析.当客户端和服务器端需要交互大量数据时,使用JSON格式传输可以简化客户端和服务器端的编程. 1  JSON对象格式 ●  JSON对象格式如下: {"key":value,"key":value,...} 例如:{"name":"兄弟连IT教育","subject":

IT兄弟连 JavaWeb教程 使用AJAX发送POST请求并获取响应

POST请求用于向服务器发送应该被保存的数据,因此POST请求天然比GET请求多需要一份需要被保存的数据.那么这些数据应该放在何处呢?毕竟,我们的open()方法接收的三个参数都没有合适的位置. 答案是需要发送的数据会作为send()方法的参数最终被发往服务器,该数据可以是任意大小,任意类型. 使用Ajax发送POST请求需要使用setRequestHeader()方法设置请求头,代码如下: function PostRequest(){ var xhr = null; if(window.XM

IT兄弟连 JavaWeb教程 AJAX中参数传递问题

使用Ajax发送GET请求并需要传递参数时,直接在URL地址后拼接参数,格式如下: xhr.open('get','请求路径?参数名1=参数值1&参数名2=参数值2...',true); 使用Ajax发送POSt请求并需要传递参数时,也可以直接在URL地址后拼接参数,这样的话和发送GET请求时没有区别,也可以在send方法中进行参数的传递,而且建议使用send方法进行参数传递,并且需要对请求头做特殊设置,设置Content-Type为URL编码方式,格式如下: xhr.setRequestHea