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

前端

复制代码
 <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.htmlhttp://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),则:

    • 访问 URLhttp://域名:端口/应用上下文/hello(例如 http://localhost:8080/test/hello)。
    • 映射规则 :Servlet 路径是 相对于应用上下文的根 (即 /test 是应用上下文,Servlet 路径 /hello 直接跟在后面,形成 /test/hello)。
  • 为什么必须加斜杠?

    Servlet 规范规定,映射路径 必须以斜杠开头 (表示从应用上下文的根开始),否则编译器会报错(如 @WebServlet("hello") 是非法的,无法启动 Tomcat)。这是后端代码的 语法强制要求,和前端路径的解析逻辑不同。

相关推荐
逢君学术论文AI写作2 小时前
Java第21课:JavaWeb入门——Tomcat+第一个Servlet
java·servlet·tomcat
就叫_这个吧2 小时前
Java使用tomcat+servlet+filter实现简单的登录功能,需先登录再进行页面数据管理操作
java·开发语言·servlet·tomcat·jsp·filter
sbjdhjd2 小时前
Tomcat(下) 集群高可用实战:反向代理・负载均衡・分布式 Session
运维·前端·云原生·开源·tomcat·负载均衡·memcached
江华森1 天前
Tomcat 10 实战部署指南:从零到生产级 Web 容器
java·前端·tomcat
sbjdhjd1 天前
企业级 Tomcat (上):WEB 技术栈 + 架构演进 + 生产级安装部署
linux·运维·云原生·开源·tomcat·云计算·负载均衡
折哥的程序人生 · 物流技术专研2 天前
Tomcat 严重警告:JDBC 驱动未注销 + 工作线程泄漏 —— 原因、影响与彻底修复(生产级终极指南)
java·运维·数据库·mysql·oracle·tomcat
万山寒2 天前
windows运行多个Tomcat Service
java·windows·tomcat
韩曙亮2 天前
【Flutter】Flutter 编译 Web 网站 ① ( Tomcat 部署 Web 网站 )
前端·flutter·tomcat·web
李白的天不白3 天前
docker run 命令中添加 --add-host 参数
tomcat
李白的天不白3 天前
一个服务器可以搭建多个网站
java·tomcat