访问路径与资源名称
通常的URL资源访问路径由两部分构成:访问路径与资源名称。资源名称指的是要访问资源的直接名称,如show.jsp,或与要访问资源存在映射关系的间接名称,如show.do。而访问路径,则是通过该路径则可以定位到指定的资源,即在URL资源访问路径中除了资源名称以外的其他部分。 一般情况下,在URL访问路径中,最后一部分为资源名称,而其他部分则为访问路径。
根据“访问路径是否可以独立完成资源准确定位”的评判标准,可以将访问路径分为绝对路径与相对路径。
绝对路径
绝对路径,是指根据给出的访问路径可以准确定位到资源的路径。例如,你要告诉对方你所在的位置,你说:我现在郑州火车站A地铁口处。这就是个绝对地址,听者根据你所述的地址,可以准确找到你。 而对于计算机中Web应用的绝对路径,则是指带访问协议的路径。例如下面的路径就是一个带有http访问协议的绝对路径。
http://127.0.0.1:8080/primary/index.jsp
相对路径
相对路径,是指仅根据访问路径无法准确定位资源的路径。相对路径必须要结合其参照路径才可组成为可以准确定位资源的绝对路径。参照路径的不同,所形成的可以准确定位资源的绝对路径也是不同的。在进行资源访问时,必须要将相对路径转换为绝对路径才可完成资源的准确定位。 例如,你要告诉对方你现在的位置,你说:我在火车站的正门门口。这就是个相对地址。因为很多城市都有火车站,每个火车站也都有正门。当对方不知道你在哪个城市时,他是无法准确定位你的。当然,你之所以不说是哪个城市,是因为这里存在一个默认的参照路径:与听者在同一个城市。听者会将你所说的相对地址,自动转换成一个绝对地址:与听者在同一个城市的火车站正门门口。 在Web应用中,相对路径的写法有两种:一种是以斜杠开头的相对路径,一种是不以斜杠开头的相对路径。根据相对路径是否以斜杠开头,且出现的文件所在位置的不同,其默认的参照路径是不同的。这也是相对路径最容易出错的地方:确定参照路径。
(1)以斜杠开头的相对路径
以斜杠开头的相对路径,根据路径所在文件所处位置的不同,分为两种:前台路径与后台路径。
A.前台路径
所谓前台路径是指,有浏览器解析执行的代码中所包含的路径。例如,html、css、js中的路径,及jsp中静态部分的路径。像html及jsp中的静态部分中的、、
等;像css中的background:img("")等,像js中的window.location.href=""等,都属于前台路径。 前台路径的参照路径是Web服务器的根路径,即http://127.0.0.1:8080/B.后台路径
所谓后台路径是指,由服务器解析执行的代码及文件中所包含的路径。例如,java代码中的路径、jsp文件动态部分(java代码块)中的路径、xml文件中的路径(xml文件是要被java代码加载入内存,并由java代码解析的)等。 后台路径的参照路径是Web应用的根路径,如http://127.0.0.1:8080/primary/
C.后台路径特例
对于后台路径的参照路径有一个特例:当代码中使用response的sendRedirect()方法进行重定向时,其参照路径不是web应用的根路径,而是web服务器的根路径。 例如执行response.sendRedirect("/show.jsp");将会报404错误。因为其参照路径是Tomcat的根,而非当前项目的根。所以若要使用重定向,要么写为无斜杠的相对路径:response.sendRedirect("show.jsp");要么在路径上添加上项目名称:response.sendRedirect(request.getContextPath + "/show.jsp");
(2)不以斜杠开头的相对路径
不以斜杠开头的路径,无论是前台路径,还是后台路径,其参照路径都是当前资源的访问路径,而不是当前资源的保存路径。