当前位置: 首页 > news >正文

相对路径 绝对路径

相对路径

1. href="/login.html"(根目录)

  • ​以 / 开头​​,表示从​​网站根目录​​开始查找。
  • 无论当前页面在哪个路径下,都会直接访问 https://example.com/login.html
  • ​适用场景​​:适用于全局导航链接(如网站顶部的登录入口)。

2. href="./login.html"(当前目录)

  • ​以 ./ 开头​​,表示从​​当前页面所在的目录​​开始查找。
  • 例如:当前页面是 https://example.com/user/profile.html,则链接指向 https://example.com/user/login.html
  • ​适用场景​​:适用于同一目录下的文件跳转(如用户个人中心内的页面切换)。
  • login.html → 同目录下的 login.html  ./ 可省略) 

3. href="../login.html"(上级目录)

  • ​以 ../ 开头​​,表示从​​当前页面的上一级目录​​开始查找。
  • 例如:当前页面是 https://example.com/user/account/profile.html,则链接指向 https://example.com/user/login.html
  • ​适用场景​​:适用于返回上一级目录的链接(如从子目录返回父级目录)。

总结对比:

写法解析方式示例(当前页面 /user/profile.html最终路径
/login.html​根目录​https://example.com/login.html✅ 固定
./login.html​当前目录​https://example.com/user/login.html取决于当前路径
../login.html​上级目录​https://example.com/login.html向上跳一级

 绝对路径

绝对路径在 Web 资源引入中的应用及相关解决方案

一、绝对路径的核心特点与应用场景
  • 基准路径固定:绝对路径的基准路径始终是服务器的根路径(如http://localhost:8080),资源查找方式为 “基准路径 + src 属性值”。
  • 适用场景
    • 无论引入资源的页面位于 Web 项目的哪个目录(如web/index.htmlweb/a/b/c/test.html),甚至是通过 Servlet 转发访问的WEB-INF下的页面(如web/WEB-INF/views/view1.html),绝对路径的写法保持一致。
    • 示例:引入web/static/img/logo.png时,绝对路径统一写为<img src="/web03_war_exploded/static/img/logo.png"/>(其中web03_war_exploded为项目上下文路径)。
二、base 标签的作用与限制
  • 核心功能:定义页面中相对路径的公共前缀,将相对路径转换为绝对路径,简化路径写法。
  • 使用方式:在<head>标签中定义,例如:
    <base href="/web03_war_exploded/">
    

    此时页面中相对路径static/img/logo.png会被解析为/web03_war_exploded/static/img/logo.png
  • 限制条件
    • 仅对相对路径有效,对绝对路径无效。
    • 若相对路径以./../开头,base 标签不生效。
三、项目上下文路径的问题与解决方案
  • 问题:项目上下文路径(如web03_war_exploded)可能会发生变化,若在绝对路径或 base 标签中硬编码该路径,修改时需逐个调整,维护成本高。
  • 解决方案:将项目上下文路径设置为缺省值/,此时绝对路径可直接以/开头,无需包含上下文路径。例如:
    • 原路径/web03_war_exploded/static/img/logo.png可简化为/static/img/logo.png
总结
  • 绝对路径适用于各种目录结构的页面,路径写法固定,但需包含项目上下文路径。
  • base 标签可简化相对路径写法,但依赖上下文路径,且有使用限制。
  • 缺省项目上下文路径(设为/)是解决路径维护问题的最优方案,可避免硬编码上下文路径带来的麻烦。

获取类路径下资源文件路径的方式

String path = Thread.currentThread().getContextClassLoader().getResource("文件名").getPath();

借助Thread.currentThread()能够得到当前正在执行的线程实例,再调用getContextClassLoader()就能获取该线程的上下文类加载器。

http://www.lryc.cn/news/607911.html

相关文章:

  • UniappDay07
  • sqli-labs:Less-19关卡详细解析
  • Qt 槽函数被执行多次,并且使用Qt::UniqueConnection无效【已解决】
  • 24黑马SpringCloud的Docker本地目录挂载出现相关问题解决
  • Tushare对接OpenBB分析A股与港股市场
  • 解锁智能油脂润滑系统:加速度与温振传感器选型协同攻略
  • 深度学习核心:卷积神经网络 - 原理、实现及在医学影像领域的应用
  • 【Java】在一个前台界面中动态展示多个数据表的字段及数据
  • 定制开发开源AI智能名片S2B2C商城小程序的特点、应用与发展研究
  • 自进化智能体综述:通往人工超级智能之路
  • SpringBoot IOC
  • C++之vector类的代码及其逻辑详解 (中)
  • 【自动化运维神器Ansible】YAML语法详解:Ansible Playbook的基石
  • vue引入阿里巴巴矢量图库的方式
  • Kotlin协程极简教程:5分钟学完关键知识点
  • docker desktop入门(docker桌面版)(提示wsl版本太低解决办法)
  • 【MySQL】增删改查操作 —— CRUD
  • Elasticsearch 混合检索一句 `retriever.rrf`,把语义召回与关键词召回融合到极致
  • MySqL(加餐)
  • 在 AKS 中运行 Azure DevOps 私有代理-1
  • Cursor 与 VS Code 与 GitHub Copilot 的全面比较
  • 字节Seed发布扩散语言模型,推理速度达2146 tokens/s,比同规模自回归快5.4倍
  • [spring6: 分布式追踪]-实战
  • AI赋能测试:技术变革与应用展望
  • 在ChinaJoy ,Soul发布“莫比乌斯·第三弹”ChinaJoy特别款
  • 深入 Go 底层原理(十二):map 的实现与哈希冲突
  • 高性能实时分析数据库:Apache Druid 查询数据 Query data
  • RK3399 启动流程 --从复位到系统加载
  • 变频器实习DAY20 测试经验总结
  • .NET 中,Process.Responding 属性用于检查进程的用户界面是否正在响应