绝对路径
概念:
绝对路径是从文件系统的根目录开始,完整描述文件或目录位置的路径。它不依赖于当前工作目录,在任何情境下指向同一位置。(一般以 ‘ / ’ 开头)
示例:
在Linux系统中,根目录是 ‘ / ’ ,在Windows系统则是以盘符开头 ‘ C:\ ’
//linux系统
/home/user/documents/file.txt
//windows系统
C:\Users\user\documents\file.txt
相对路径
概念:
相对路径是从当前工作目录出发,描述文件或目录位置的路径。其指向的目标会随当前目录变化而改变。(一般不以 ‘ / ’ 开头)
- . / 表示当前文件所在目录(一般可省略)
- . . / 表示当前文件的上级目录(父目录)
- . . / . . / 表示上上级目录(每往上一层就叠加一个 ‘ . . / ’ )
示例:
前端路径问题
前端的相对路径:
不以 ‘ / ’ 开头,以当前资源所在目录为主
示例1:
项目上下文
项目结构
运行结果
分析
通过打开浏览器控制台的网络可以看到,当前请求的资源是index.html(默认打开的文件),在这过程中发现img标签,浏览器又发送一次请求去获取图片,在请求标头中可以看到,再次请求去获取图片资源时,是将当前资源的路径替换为img标签中src属性的值(304是因为控制台打开慢了,已经请求到资源放到浏览器缓存中了)
示例2:
项目结构
运行结果
分析
当文件目录变化了,那么文件内相应路径也需要相应变化, 有点类似消消乐,为什么这么写,因为存放图片的第一级目录是static,与a.html文件的第一级目录a是同级的
总结:
web前端相对路径就是在当前资源所在路径后,拼接目标资源路径,然后发送请求获取目标资源
前端绝对路径:
以 ’ / ‘ 开头,从固定点出发去寻找资源
示例:
项目结构1:绝对路径:/项目上下文件/目标资源路径
项目结构2:绝对路径:/目标资源路径
运行结果1
运行结果2
分析
写绝对路径时,都是以 ‘ / ’ 开头去找目标资源,但是如果不带上项目上下文的路径,会出现404,访问不到目标资源
总结
web前端的绝对路径是以http://localhost:8080/为出发点去找目标资源
TIP:
项目上下文路径是可以改变的,而目标资源绝对路径需要写上项目上下文,如果直接把项目上下文改成 ‘ / ’ ,那么便可以直接通过目标资源在项目中的路径去定位,无需再写项目上下文
后端路径问题
重定向相对路径
示例1:
项目结构
运行结果
分析
在网络中可以看到,请求的servlet1后,它返回了302,并在响应标头中携带location:servlet2的一个参数,它的值就是servlet1重定向时写的路径
示例2:
项目结构
将servlet1的映射路径改为 @WebServlet("/a/b/servlet1") 其他不变
运行结果
总结
重定向使用相对路径时,是在当前资源的所在路径下,直接拼接响应头中location的值去请求资源(与前端相对路径很类似)
重定向绝对路径
示例:
就不给出示例了,@WebServlet("/servlet1"),resp.sendRedirect("/web_demo/servlet2"); 此时是可以正常访问到servlet2的。重定向的绝对路径其实也是与前端绝对路径那块很类似,直接看总结
总结
重定向的绝对路径以 http://localhost:8080/项目上下文/ 为出发点去找
请求转发相对路径
示例:
项目结构
运行结果
如果给它修改为@WebServlet("/a/servlet1"),其他不变,此时请求servlet1后会响应404,页面展示 ‘ 请求的资源[/web_demo/a/servlet2]不可用 ’
总结
相对路径写法与前面所说也是一致的,都是以当前资源所在路径为主
请求转发绝对路径
示例:
项目结构:注意看servlet1的映射路径,请求转发时servlet2的映射路径,按照上面所说,肯定是访问不到的吧,不着急,看一下结果
运行结果:是不是大为震惊,居然能访问到。哎,请求转发的绝对路径的是个特殊
直接访问servlet2
总结
请求转发的绝对路径是以 http://localhost:8080/项目上下文/ 为出发点去寻找目标资源的
总而言之,路径这块,如果遇到404问题,可以自己按F12打开开发者工具,自行查看各个资源的路径,大胆修改,重新部署,重新查看,看看与上次有什么不同,这样才更印象深刻。