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

前端

复制代码
 <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)。这是后端代码的 语法强制要求,和前端路径的解析逻辑不同。

相关推荐
菠萝催学12320 小时前
日志配置Slf4j
java·数据库·spring·tomcat·maven·intellij-idea
三口吃掉你1 天前
Web服务器(Tomcat、项目部署)
服务器·前端·tomcat
Spliceㅤ1 天前
Spring框架
java·服务器·后端·spring·servlet·java-ee·tomcat
贺贺丿1 天前
Docker4-容器化企业级应用
linux·nginx·docker·云原生·eureka·tomcat·ssh
Littlewith2 天前
Java进阶3:Java集合框架、ArrayList、LinkedList、HashSet、HashMap和他们的迭代器
java·开发语言·spring boot·spring·java-ee·eclipse·tomcat
!chen2 天前
Linux dd命令 数据备份、转换与磁盘操作的终极工具
linux·数据库·tomcat
ModelBulider3 天前
四、配置文件
java·spring boot·后端·spring·tomcat
小周学学学4 天前
Tomcat及Nginx部署使用
服务器·nginx·tomcat
云游5 天前
k8s:离线部署tomcatV11.0.9,报Cannot find /opt/bitnami/tomcat/bin/setclasspath.sh
容器·kubernetes·tomcat
过期动态5 天前
MySQL中的多表查询和笛卡尔积问题
java·数据库·mysql·spring·tomcat·mybatis