一、web 中的相对路径和绝对路径
在 JavaWeb 中,路径分为相对路径和绝对路径两种:
1、相对路径
相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
. 表示当前目录
../ 表示上一级目录
资源名 表示当前目录/资源名
2、绝对路径
绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。(一般都是以"/"斜杠开头的)
HTML中的绝对路径(Absolute path)指带域名的文件的完整路径。
Web中的绝对路径:指带请求协议的路径,根据给出的请求路径可以准确定位到资源的路径,绝对路径=参照路径+相对路径
格式:http://ip:port/工程路径/资源路径
注意:在实际开发中,路径都使用绝对路径,而不是使用相对路径。
使用绝对路径的两种方式:
① 直接使用绝对路径;
② 也可以使用 <base>标签(参照路径)+ 相对路径 的方式
二、web 中 "/" 的意义
在 Web 项目中 /(斜杠) 是一种 绝对路径。
1、/ 斜杠被浏览器解析
/(斜杠) 如果被浏览器解析,代表着当前服务器的路径
地址格式:http://ip:port http://主机地址:端口号[到服务器]
有下面几种情况都是由浏览器解析的:
(1)html中的路径,如:
① img 标签和script标签的 src 的属性;
② a标签和link标签的 href 属性;
③ from标签的 action属性;
(2)重定向
response.sendRediect(“/”); 把斜杠发送给浏览器解析,得到 http://ip:port/
2、/ 斜杠被服务器解析
/(斜杠) 如果被服务器解析,代表着当前项目的路径
地址格式是: http://ip:port/工程路径 http://主机地址:端口号/项目名[到项目]
以下几种情况都是由服务器解析的:
(1)web.xml 中的设置,如 <url-pattern>/servlet1</url-pattern>
(2)servletContext.getRealPath(“/”); 得到当前项目的真实路径
(3)request.getRequestDispatcher(“/”); (请求转发)
总结:
(1)带斜杠的放在配置文件和Java代码中的路径为后台路径(后台路径的参照路径是web应用的根,例如http://127.0.0.1:8080/ServletDemo)
(2)带斜杠的放在 JSP 前台页面的前台路径(其参照路径是服务器的根,http://localhost:8080)
(3)没有以斜杠开头的路径,其参照路径就是当前的访问路径
(4)<base href="<%=basePath%>"> base标签会自动在当前页面的不以斜杠开头的路径前加上 basepath 的路径(即web项目的路径),使其变为绝对路径
IDEA 中JavaWeb项目目录结构:
三、Base 标签的作用
base标签是HTML语言中的基准网址标记,它是一个单标签,位于网页头部文件的head标签内,Title标签下面,一个页面最多只能使用一个base元素,用来提供一个指定的默认目标,也算是一种表达路径和连接网址的标记。
通俗的说,base 标签可以设置当前页面中所有相对路径工作时,让相对路径不再参考相对位置,只和基准地址拼接,然后来进行跳转。(注意:是相对路径的参照,对绝对路径无效)
常见的 url 路径形式分别有相对路径与绝对路径,如果 base 标签指定了目标,浏览器将通过这个目标来解析当前文档中的所有相对路径,包括的标签有(a、img、link、form)。
也就是说,浏览器解析时会在路径前加上base给的目标,而页面中的相对路径也都转换成了绝对路径。
格式:
<base href="http://localhost:8080/项目路径/ ">
<base href="/项目路径/" >
注意:base 后面的最后一个 /(斜杠) 不能省略,因为它表示一个目录,如果省略了,就代表一个资源。
使用了base标签就应带上href属性和target属性。
1、base的 href属性
比如由base制定了一个URL地址,接下来你所要调用的文件或图片等就无须再填写完整的地址,只需写上该文件名或图片名即可。
2、base target
target属性是网页窗口的打开方式,在base标签中设置该属性,那么页面中所有的链接都将遵循这个方式来打开网页,分别有如下几种选择:
_blank:在新窗口打开链接页面。
_parent:在上一级窗口中打开链接。
_self: 在当前窗口打开链接,此为默认值,可以省略。
_top: 在浏览器的整个窗口打开链接,忽略任何框架。
注意:<base>标签仅对相对地址有效,对于绝对地址是无效的。
Demo:
1 <!DOCTYPE html>
2 <html lang="zh_CN">
3 <head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6 <!--base 标签设置页面相对路径工作时参照的地址
7 href 属性就是参数的地址值
8 -->
9 <base href="http://localhost:8080/07_servlet/a/b/">
10 </head>
11 <body>
12 这是 a 下的 b 下的 c.html 页面<br/>
13 <a href="../../index.html">跳回首页</a><br/>
14 </body>
15 </html>