You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Controller接收重复请求:URL路径重复问题求助

解决Spring Controller请求URL重复路径问题

我来帮你拆解下这个问题的核心原因,再给出几种实用的解决方案:

问题根源

你当前访问的页面URL是https://localhost:8080/v/test,而表单里写的action="v/view"是相对路径——浏览器会自动把这个相对路径拼接在当前页面的URL路径后面,也就是/v/ + v/view,最终就出现了/v/v/view这种重复路径的情况。

而你的Controller类上已经标注了@RequestMapping("v"),所以正确的目标路径应该是基于根路径的/v/view,或者相对于当前页面的view。

另外还要提个小细节:你Controller里两个请求方法的方法名都是view(),这在Java里会直接编译报错,得把其中一个方法名改掉,比如改成loginView(),不然项目根本跑不起来。

解决方案

方案1:使用绝对路径(最直接)

把表单的action改成以/开头的绝对路径,让浏览器直接从根路径开始拼接:

<form action="/v/view">
  <!-- 表单内容与提交按钮 -->
</form>

方案2:结合Spring标签适配上下文路径(推荐)

如果你的项目部署时有上下文路径(比如部署在/my-project下),上面的绝对路径会忽略上下文路径导致请求失败。这时候可以用Spring的<c:url>标签自动生成带上下文路径的正确URL:
首先在JSP页面顶部引入JSTL核心标签库:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

然后修改表单action:

<form action="<c:url value='/v/view'/>">
  <!-- 表单内容与提交按钮 -->
</form>

方案3:使用层级相对路径

当前页面的URL是/v/test,它的上级路径就是/v/,所以可以直接把action写成目标方法的映射路径:

<form action="view">
  <!-- 表单内容与提交按钮 -->
</form>

浏览器会自动解析为/v/test/../view,最终等价于/v/view。

最后修正你的Controller代码(解决方法名重复问题):

@Controller
@RequestMapping("v")
public class ControllerDemo{
    @RequestMapping("test")
    public String testView() {
        return "index.jsp";
    }
    @RequestMapping("view")
    public String loginView() {
        return "login.jsp";
    }
}

内容的提问来源于stack exchange,提问作者Amit Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:36:37