1.访问路径的组成
URL,统一资源定位符,用于定位资源的一种方式。 通常的 URL 资源访问路径由两部分
构成:资源路径与资源名称 。资源名称指的是要访问资源的直接名称,如 show.html ,或与要访问资源存在映射关系的间接名称,如 show.do 。而资源路径,则是通过该路径则可以定位到指定的资源,即资源路径是指在 URL 资源访问路径中除了资源名称以外的其它部分。
根据以上规则,URI ,统一资源标识符,也可以分为资源路径与资源名称两部分。
一般情况下,在 URL 或 URI 中,最后一个斜杠后的部分为资源名称,而其它部分则为资
源路径。
根据“资源路径是否可以独立完成资源准确定位”的判别标准,可以将访问路径分为绝
对路径与相对路径。
2.绝对路径
绝对路径,是指根据给出的访问路径可以准确定位到资源的路径。例如,你要告诉对方
你现在的位置,你说:我现在在北京故宫游客 A 入口处。这就是个绝对地址,听者根据你所
述地址,可以准确的找到你。
而对于计算机中 Web 应用的绝对路径,则是指带访问协议的路径 ,即 URL 。 例如下面
的路径就是一个带有 http 访问协议的绝对路径。
http://127.0.0.1:8080/primary/index.jsp
3.相对路径
相对路径,是指仅根据访问路径无法准确定位资源的路径。 相对路径必须要结合其参照
路径才可组成可以准确定位资源的绝对路径。 参照路径的不同,所形成的可以准确定位资源的绝对路径也是不同的。在进行资源访问时,必须要将相对路径转换为绝对路径才可完成资源的准确定位。它们的关系如下:
绝对路径 = 参照路径 + 相对路径
例如,你要告诉对方你现在的位置,你说:我在人民公园的正门门口。这就是个相对地
址。因为很多城市都有人民公园,每个人民公园也都有正门。当对方不知道你在哪个城市时,他是无法准确定位你的。当然,你之所以不说是哪 个城市,是因为这里存在一个默认的参照路径:与听者在同一个城市。听者会将你所说的相对地址,自动转换为一个绝对地址:与听者在同一城市的人民公园正门门口。
在Web 应用中,浏览器或服务器会自动为不同的相对路径添加不同的参照路径,将相
对路径转换为绝对路径,以定位这个资源。作为程序员,必须要理解并掌握浏览器或服务器
为相对路径添加参照路径的规则,这样才能在编程时更为准确地书写相对路径。
相对路径的写法有两种:一种是以斜杠开头的相对路径,一种是以路径名称开头的相对
路径。 根据相对路径是否以斜杠开头,且路径出现的文件的不同 ,其默认的参照路径是不同的。 这是我们学习的重点,是路径问题中最容易出错的地方:确定相对路径的参照路径。
3.1.以斜杠开头的相对路径
以斜杠开头的相对路径,根据路径所在文件所处位置的不同,分为两种:前台路径与后
台路径。
- 前台路径
-
所谓前台路径是指,由浏览器解析执行的代码中所包含的路径。例如, html 、 css 、 js 中的路径,及 jsp 文件中静态部分的路径( HTML 标签中的路径 )。 例如, html 及 jsp 文件中的
<img src=''"/>、<a href=""></a>、<form action=""></form>
等标签中的路径再如, css 文件中的background:img("")
( 等属性中的路径,js 文件中的window.location.href=""
等属性中的路径 ,都属于前台路径。 -
前台路径的参照路径是Web服务器的根路径,即 http://127.0.0.1:8080。
-
将前台路径转换为绝对路径的工作,是由浏览器自动完成的。该路径的作用是要为用户提交对某种资源的请求,是要查找并定位服务器中的某资源。简单来说,前台路径的作用是“查找”。
- 后台路径
-
所谓后台路径是指,由服务器解析执行的代码及文件中所包含的路径。例如, java 代码中的路径、jsp 文件动态部分( java 代码块)中的路径、 xml 等配置文件中的路径( 配置文件是要被 java 代码 解析后加载到内存的,其中的路径会出现在 Java 代码中 )等。
-
后台路径的参照路径是 Web 应用的根路径 。如 http://127.0.0.1:8080/BookShop 。
-
将后台路径转换为绝对路径的工作,是由服务器自动完成的。 该路径的作用是标识出该资源在服务器中的路径,以便客户端能够按照这个设定路径来查找相应资源。简单来说,后台路径的作用是“标识”。
- 后台路径特例
- 对于后台路径的参照路径有一个特例:当代码中使用 response 的
sendRedirect()
方法进行重定向时, 若其参照路径是以斜杠开头,则其参照路径不是 web 应用的根路径,而是 web服务器的根路径。
3.2.以路径名称开头的相对路径
以路径名称开头的相对路径,无论是出现在前台页面 ,还是出现在后台 Java 代码或配置文件中 其参照路径都是当前访问路径的资源路径 。 即使是 response 的 sendRedirect()
方法的参数路径,若不以斜杠开头,其也属于以路径名称开头的相对路径”类,参照路径为当前访问路径的资源路径。
3.3.总结
4.前台路径问题举例
1.超链接例子:
项目名称:relativePath
在项目中添加图片资源:
定义 index 页面:
2.表单例子:
项目名称:relativePath2
定义 index 页面:
定义并注册 Servlet:
5.后台路径问题举例
1.配置文件中路径的分析
直接分析
relativePath2 项目的 web.xml 配置文件中对 SomeServlet 的注册,其中<url pattern/>
路径以斜杠开头,表示的意义。
2.Java代码中的路径分析
项目名称:relativePath3
定义并注册 SomeServlet:
定义并注册 OtherServlet:
3.特例举例
直接修改 relativePath3 项目中的 SomeServlet 的跳转方式。
6.以路径名称开头的相对路径举例
1.超链接例子
直接修改项目 relativePath 中的 index 页面,在其中添加如下内容:
2.表单例子
直接修改项目 relativePath2 中的 index 页面,,在其中添加如下内容:
3.Java代码中的路径问题
直接修改项目 relativePath3 中的 SomeServlet。