相对路径
不以斜杠/开头。以点.开头的路径。比如
- ./:当前目录
- ../:后退以及目录
- 既不以/开头,也不以./开头的路径,默认为./开头,比如xxx等价于./xxx
通过相对路径不可以确定唯一资源
例子
先看我们的项目目录接口,有2个页面,a.html和b.html,不在同一级目录,还有一个资源是/demo4
a.html的代码为
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>a</title> </head> <body> <h1>这是a</h1> <h3>a的路径为http://localhost:8080/bServlet/a.html</h3> <a href="demo4">相对路径到demo4</a><br> <a href="./demo4">相对路径到demo4</a><br> <a href="/bServlet/demo4">绝对路径到demo4</a> </body> </html>
b.html的代码为
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>b</title> </head> <body> <h1>这是b</h1> <h3>b的路径为http://localhost:8080/bServlet/html/b.html</h3> <a href="../demo4">相对路径到demo4</a><br> </body> </html>
资源/demo4的代码为
package com.lingaolu.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; /** * @author 林高禄 * @create 2020-07-07-16:46 */ @WebServlet(value="/demo4") public class ServletDemo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet.....demo4."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost......demo4"); } }
启动访问
从上面可以知道
- /demo4的全路径为http://localhost:8080/bServlet/demo4
- a.html的全路径为http://localhost:8080/bServlet/a.html
- b.html的全路径为http://localhost:8080/bServlet/html/a.html
所以,对本次例子来说:
- a.html相对路径访问/demo4的时候,可以是./demo4也可以是demo4,因为demo4也会被转为./demo4
- a.html绝对路径访问/demo4的时候,是/bServlet/demo4
- b.html相对路径访问/demo4的时候,因为b.html和/demo4不在同一层路径目录,而b.html的上一层html和/demo4才在同一层目录,所以b.html相对路径访问/demo4是../demo4,(../表示返回上一层)
以上a.html和b.html的所以a标签都能访问到资源/demo4
绝对路径
以斜杠/开头的路径,比如
- /xxx
通过绝对路径可以确定唯一资源
绝对路径规则,看需不需要加虚拟目录
- 给客户端浏览器使用,需要加虚拟目录
- 给服务器使用,不需要加虚拟目录
例子
给客户端浏览器使用
比如Response重定向详情,因为重定向是多次请求,每次请求都是返回给客户端重新请求的,所以需要加虚拟路径
给服务器使用
比如Request请求转发详解,因为请求转发是服务器内部的转发,只请求一次,所以不需要加虚拟路径