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

前后端交互中的绝对路径和相对路径

前端

 <form action="hello" method="post">

1. 不加斜杠

(相对路径,如 action="hello"

  • 解析规则:基于当前页面的 URL 路径部分 进行拼接。
    假设当前页面 URL 是 http://域名:端口/应用上下文/xxx.html(例如 http://localhost:8080/test/page.html),则:

    • 浏览器会将 hello 拼接到 当前路径的最后一级目录后
    • 若当前路径是 /test/(比如页面是 /test/index.html,其路径部分为 /test/),则 action="hello" 解析为 http://域名:端口/test/hello
    • 若当前路径是 /test/sub/(页面是 /test/sub/page.html),则解析为 http://域名:端口/test/sub/hello
  • 特点继承当前页面的路径前缀(包括应用上下文、子目录等),适用于 同应用内的路径跳转(比如后端接口在应用上下文内,如 /test/hello)。

2. 加斜杠

(根路径,如 action="/hello"

  • 解析规则:从 域名的根路径 开始拼接(忽略当前页面的路径前缀)。
    无论当前页面 URL 是什么(比如 http://localhost:8080/test/page.html 或 http://localhost:8080/other/page.html),action="/hello" 都会解析为 http://域名:端口/hello(直接指向根路径下的 hello,与当前页面的路径无关)。

  • 特点强制从根开始,适用于 跨应用或根路径下的接口(若后端接口确实在根路径,如 /hello,但实际开发中较少见,因为 Web 应用通常有上下文路径)。

 举例对比

(假设应用上下文是 /test,当前页面是 /test/index.html):

  • 不加斜杠action="hello" → 解析为 http://localhost:8080/test/hello(带应用上下文,正确访问应用内的接口)。
  • 加斜杠action="/hello" → 解析为 http://localhost:8080/hello(不带应用上下文,若后端接口不在根路径,会 404 错误)。

总结:

  • 不加斜杠跟着当前页面的路径走(适合应用内的相对路径,自动带上应用上下文)。
  • 加斜杠直接从根开始(适合根路径下的绝对路径,与当前页面路径无关)。

后端 

@WebServlet("/hello")

后端 Servlet 路径

@WebServlet("/hello")

  • 路径含义
    该 Servlet 映射到 应用上下文内的 /hello 路径。假设应用上下文是 /test(如之前配置的 Context path),则:

    • 访问 URL 为 http://域名:端口/应用上下文/hello(例如 http://localhost:8080/test/hello)。
    • 映射规则:Servlet 路径是 相对于应用上下文的根(即 /test 是应用上下文,Servlet 路径 /hello 直接跟在后面,形成 /test/hello)。
  • 为什么必须加斜杠?
    Servlet 规范规定,映射路径 必须以斜杠开头(表示从应用上下文的根开始),否则编译器会报错(如 @WebServlet("hello") 是非法的,无法启动 Tomcat)。这是后端代码的 语法强制要求,和前端路径的解析逻辑不同。

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

相关文章:

  • 从零开始学习three.js(18):一文详解three.js中的着色器Shader
  • 调用百度云API机器翻译
  • 大模型训练计算显存占用
  • uni-app学习笔记六-vue3响应式基础
  • 亚远景-ASPICE与ISO 21434在汽车电子系统开发中的应用案例
  • 『已解决』Python virtualenv_ error_ unrecognized arguments_--wheel-bundle
  • 详细介绍一下Python连接MySQL数据库的完整步骤
  • 【Unity 2023 新版InputSystem系统】新版InputSystem 如何进行人物移动(包括配置、代码详细实现过程)
  • 单片机-STM32部分:13-1、编码器
  • 机器学习第十二讲:特征选择 → 选最重要的考试科目做录取判断
  • 关于我在使用stream().toList()遇到的问题
  • javascript 编程基础(2)javascript与Node.js
  • Spring Boot 集成 druid,实现 SQL 监控
  • 多卡跑ollama run deepseek-r1
  • HTML向四周扩散背景
  • 基于Java在高德地图面查询检索中使用WGS84坐标的一种方法-以某商场的POI数据检索为例
  • 使用 Terraform 创建 Azure Databricks
  • 本地部署dify+ragflow+deepseek ,结合小模型实现故障预测,并结合本地知识库和大模型给出维修建议
  • SECERN AI提出3D生成方法SVAD!单张图像合成超逼真3D Avatar!
  • 深入探索:Core Web Vitals 进阶优化与新兴指标
  • c/c++的opencv开闭操作
  • 【物联网】 ubantu20.04 搭建L2TP服务器
  • winrar 工具测试 下载 与安装
  • PLC组网的方法、要点及实施全解析
  • 网络安全深度解析:21种常见网站漏洞及防御指南
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit (3)
  • Java大厂面试实战:Spring Boot与微服务场景中的技术点解析
  • 从零启动 Elasticsearch
  • 比较两个用于手写体识别的卷积神经网络(CNN)模型
  • Linux利用多线程和线程同步实现一个简单的聊天服务器