1、相对路径
相对于当前页面的路径
使用相对路径,要访问资源页面时有三种情况:
⑴ 资源页面在同级目录下:直接访问要跳转的资源页面
⑵ 资源页面在下级目录下:路径名/资源名
⑶ 资源页面在上级目录下:../路径名/资源名
注意:使用请求的转发时,使用相对路径会失效,可能会404 Not Found(找不到页面)
因为使用请求的转发,虽然最终显示的是转发的页面,但是浏览器的地址栏中的URL地址并没有改变,还是访问Servlet的路径,而一般Servlet都会映射到WebContent目录下。而一旦再次访问的页面没有在WebContent的路径下时,访问页面就会找不到
但是使用重定向时,相对路径可以使用。这是因为浏览器会发起两次请求,第二次请求的文件路径是最终的结果(正确的)
所以开发时应尽量避免使用相对路径,而使用绝对路径
2、绝对路径
某一资源页面的路径是使用类似于:
http://localhost:8080/项目名/资源名
这种绝对的形式,就是绝对路径
使用绝对路径,请求的转发就不会影响要再次访问的资源页面的路径
以 / 开头的路径就是绝对路径
注意:在不同的地方,绝对路径的前段地址不同,即 / 代表的地址是不同的
/ 代表WEB站点的根目录
/ 代表的前段地址是: http://localhost:8080
① 在页面中使用时,就是这种情况。所以在HTML页面中使用绝对路径时,需要添加 /项目名
② 请求的重定向,也是这种情况,所以也需要添加 /项目名
Tips:可以通过request.getContextPath(); 来获取 /项目名
所以完整的请求的重定向就是:
response.sendRedirect(request.getContextPath() + “/路径名/项目名”);
/ 代表WEB项目的根目录
/ 代表的前段地址是:http://localhost:8080/项目名
请求的转发就是这种情况,所以直接就可以加 /路径/资源名
3、总结
⑴ 相对路径:在使用相对路径时,转发会影响相对地址。因为请求的转发,浏览器不知道地址的变化。
⑵ 绝对路径:
① 在HTML页面中使用绝对路径,/ 所代表的前段地址是当前站点的根目录【http://localhost:8080】
② 在重定向时,/ 所代表的前段地址是当前站点的根目录【http://localhost:8080】
③ 在转发时, / 所代表的前段地址就是当前项目的根目录【http://localhost:8080/项目名】
⑶ 总述:
当地址是由浏览器解析时【HTML页面中,或重定向时】, / 所代表的前段地址就是当前站点的根目录
当地址是由服务器解析时【转发时】, / 所代表的前段地址就是当前项目的根目录
具体应用
在HTML的head标签中有一个base子标签【单标签】,它有一个href属性。其作用是在页面中设置一个前段地址,通过此地址可以让我们在页面中以相对路径的方式,来访问绝对的路径。
Tips:这其中包括 <a>、<img>、<link>、<form> 标签中的 URL
本质上就是将base的href属性中的URL地址值和页面中的其他标签所指向的URL地址值拼接起来
注意:base标签对绝对路径不起作用
示例:
<head>
...
<base href="http://localhost:8080/项目名/" />
...
</head>
<body>
...
<a href="index.html">到首页</a>
...
</body>
因为在head中添加了base标签,所以此时页面中的其他标签所指向的URL地址的前面都添加了base标签的href属性,即其他标签的URL地址变成了绝对路径
所以此时a标签的href地址就变成了:
http://localhost:8080/项目名/index.html
这样就变成了绝对路径