Web应用中的路径问题
路径
一些前提:
-
假设项目部署在子路径
http://localhost:8080/myapp,其中myapp为项目的上下文路径即访问路径 -
访问前端资源时比如访问index.html时这个html网页中有其他资源比如html、css等需要客户端重新发起对这些资源的请求,所以不能通过这种方式访问到WEB-INF中的资源
-
相对路径为不在路径前面加
/,比如img.html -
绝对路径为不在路径前面
/,比如/img.html
前端资源文件中的相对路径
- 前端的相对路径是相对于当前访问资源的路径的
- 假如当前访问的资源为
http://localhost:8080/myapp/index.html,该index文件下有相对路径的写法 - 则访问的是相对于
http://localhost:8080/myapp/的相关资源文件,加../就是往前去掉一层目录
- 假如当前访问的资源为
前端资源文件中的绝对路径
- 前端的绝对路径是相对于当前访问的项目路径的
- 项目部署在
http://localhost:8080/myapp,则绝对路径为http://localhost:8080/ - 如果该项目有上下文路径,则访问资源时需要补充上下文路径即
/myapp/image
- 项目部署在
后端的路径
-
在配置servlet的映射路径时必须写上前面的
/,这个和相对与绝对路径不同,访问该资源时需要加上下文路径 -
@WebServlet("/user") public class UserServlet extends HttpServlet { // ... } -
访问该servlet:
http://localhost:8080/myapp/user
转发时的路径
- 请求转发
- 请求转发中相对路径和前端页面一样
- 请求转发中的绝对路径也会添加上项目上下文路径,即会在路径前面添加
http://localhost:8080/myapp而不是http://localhost:8080/ - 所以请求转发无法访问外部资源网站
- 重定向
- 重定向由于是重新发出请求,所以和前端访问的相对和绝对路径规则相同
总结
- 其实就是加不加项目上下文路径的区别
- 相对路径需要注意文件的相对位置
- 如果项目上下文路径设置为
/,则相对路径和绝对路径自动添加的前缀相同

浙公网安备 33010602011771号