参考动力节点B站JavaWeb教程
URL(Unitform Resource Locator):统一资源定位符,用于定位资源的一种方式,通常的URL资源访问路径由两部分构成:资源路径与资源名称。
资源名称指的是要访问资源的直接名称,如:show.html,index.html。或与要访问资源存在映射关系的间接名称,如:show.do等。
而资源路径则是通过该路径可以定位到指定的资源,即资源路径是指在URL资源访问路径中除了资源名称以外的其它部分。URI与URL一样。
一般情况下,在URL或URI(Unitform Resource Identifier)中,最后一个斜杠后的部分为资源名称,而其它部分为资源路径。
根据“资源路径是否可以独立完成资源精确定位”的判别标准,可以将访问路径分为绝对路径与相对路径。
绝对路径:根据给出的访问路径可以准确定位到资源的路径。
Web应用的绝对路径:是指带访问协议的路径,即URL。
相对路径:仅根据访问路径无法准确定位资源的路径,相对路径必须要结合其参照路径才可组成可以准确定位资源的绝对路径。(绝对路径=相对路径+参照路径)
相对路径的写法有两种:一种是以斜杠开头的相对路径,一种是以路径名称开头的相对路径。根据相对路径是否以斜杠开头,且路径出现的文件的不同,其默认的参照路径是不同的。
(1)以斜杠开头的相对路径
以斜杠开头的相对路径,根据路径所在文件所处位置的不同,分为两种:前台路径后台路径。
(A)前台路径
前台路径是指由浏览器所执行的代码中所包含的路径。例如:html,css,js中的路径,以及jsp文件中静态部分的路径(HTML标签中的路径),
(a)html及jsp文件中的标签中的路径:
<img src=""/>
<a href=""></a>
<form action=""></form>
(b)css文件中的路径
background:img("");
(c)js文件中的路径:
window.location.href="";
前台路径的参照路径是Web服务器的根路径,即http://localhost:8080。
前台路径转换为绝对路径是由浏览器自动完成的,该路径的作用是要为用户提交对某种资源的请求,是要查找并定位服务器中的某资源。简单来说,前台路径的作用是“查找”。
后台路径是指由服务器解析执行的代码及文件中所包含的路径,例如:java代码中的路径,jsp文件的动态部分(java代码块)中的路径,xml等配置文件中的路径(配置文件是要被java代码解析后加载到内存,其中的路径会出现在java代码中)
后台路径的参照路径是Web应用的根路径:如:http://localhost:8080/01-Test。
后台路径转换为绝对路径是由服务器自动完成的,该路径的作用是表示出该资源在服务器中的路径,以便客户端能够按照这个设定路径查找相应资源,简单来说,后台路径的作用是“标识”。
特例:
/*
注意:对于response的sendRedirect()方法完成的重定向,若其参数路径为“以斜杠开头的相对路径”
这个路径是个特例,之所以其为特例,是由sendRedirect()方法的本质决定的,这个方法不仅可以完成在当前项目中资源的跳转,还可以跳转到其他项目中的资源。所以这个后台路径的参照路径为“当前Web服务器的根”
注意:只有这一种重定向是特例,还有其他方式实现地重定向,但那里的不是特例,而是遵循之前的路径转换理论,当res.sendRedirect("otherServlet")完成的重定向不以斜杠开头时不是特例。
*/
//res.sendRedirect("/otherServlet");//此写法无法完成跳转
//res.sendRedirect("/24-relativePath3/otherServlet");//可以完成跳转,但这样不太好,会随项目名称改动
//最好的写法
res.sendRedirect(req.getContextPath()+"/otherServlet");//req.getContextPath(),该方法会得到项目名称
(2)以路径名称开头的相对路径
其参照路径均为当前访问路径的资源路径。