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/
    • 所以请求转发无法访问外部资源网站
  • 重定向
    • 重定向由于是重新发出请求,所以和前端访问的相对和绝对路径规则相同

总结

  • 其实就是加不加项目上下文路径的区别
    • 相对路径需要注意文件的相对位置
  • 如果项目上下文路径设置为/,则相对路径和绝对路径自动添加的前缀相同
posted @ 2025-03-18 15:54  QAQ001  阅读(27)  评论(0)    收藏  举报