简易Web应用跳转路径错误:如何修复按钮跳转至错误页面?
修复Web应用跳转路径错误的方案
这个问题是相对路径解析规则导致的:当你使用href="dashboard"这种相对路径时,浏览器会根据当前页面的URL来决定跳转目标:
- 在
mywebSite.com/user(URL末尾无斜杠)页面,浏览器会把dashboard解析为替换当前路径的最后一段,也就是跳转到mywebSite.com/dashboard,刚好符合你的预期; - 但在
mywebSite.com/user/John(URL属于层级路径,末尾隐含斜杠)页面,浏览器会把dashboard当成当前路径的子路径,所以错误跳转到mywebSite.com/user/dashboard。
下面是几种靠谱的修复方案:
方案1:使用根路径开头的绝对路径
直接把跳转链接的href改成以斜杠开头的绝对路径,这样不管当前在哪个页面,都会从网站根目录开始解析:
<a class="btn btn-primary mt-5 btn-rounded btn-lg" href="/dashboard">返回首页</a>
这是最简单直接的解决方法,适合大部分场景。
方案2:使用Spring MVC的<c:url>标签生成正确URL
如果你的应用部署时有上下文路径(比如部署在mywebSite.com/myapp/下),硬写斜杠开头的路径可能会出问题。这种情况下推荐用Spring的JSTL标签来动态生成URL:
- 先在JSP页面顶部引入JSTL核心标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 然后用
<c:url>标签生成跳转链接:
<a class="btn btn-primary mt-5 btn-rounded btn-lg" href="<c:url value='/dashboard'/>">返回首页</a>
这个标签会自动帮你拼接上下文路径,确保跳转始终指向正确的控制器路由。
方案3:在控制器中添加跳转逻辑(可选)
如果你希望通过后端控制跳转,可以在用户相关的控制器中添加一个返回首页的方法,然后让按钮提交到这个方法:
@RequestMapping("/goToDashboard") public String goToDashboard() { return "redirect:/dashboard"; }
然后前端链接改成:
<a class="btn btn-primary mt-5 btn-rounded btn-lg" href="/goToDashboard">返回首页</a>
这种方式适合需要在跳转前做一些业务逻辑处理的场景,不过单纯跳转的话有点多余。
总结:优先用方案1或方案2,前者简单,后者更灵活适配不同部署环境。
内容的提问来源于stack exchange,提问作者user9565299
相关产品推荐
相关产品推荐

