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
相关产品推荐
相关产品推荐

