我在尝试在春季 mvc 中进行一些简单的导航时遇到了问题。我有一个导航控制器:
@Controller
@RequestMapping("/secure")
public class NavigationController {
@RequestMapping("/operation")
public String processOperationPage() {
//Some logic goes here
return "corpus/operation";
}
@RequestMapping("/configuration")
public String processConfigurationPage() {
//Some logic goes here
return "corpus/configuration";
}
}
有我的链接可以到达该控制器:
<a href="secure/operation.htm">Operation</a>
<a href="secure/configuration.htm">Configuration</a>
第一次单击链接时,一切正常。在浏览器中,我看到了预期的正常路径。例如:http://localhost/obia/secure/configuration.htm
.但是,如果我在此页面上,并且从此页面我想到达操作.htm则当我单击操作链接时,路径将变为如下所示:http://localhost/obia/secure/secure/operation.htm
。
secure
出现两次。如何解决这个问题?
您的链接是相对的。 在他们面前添加一个斜杠将修复它。
如果您使用的是 JSP,请改用 JSTL
:<c:url value="/secure/operation.htm" />
请记住在 JSP 文件中包含 taglib:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
通过使用 JSTL,可以避免在将应用部署到不同的上下文(如http://host/
和http://host/myapp
)后更改 URL
第一个将生成http://host/secure/operation.htm
第二个将为您生成http://host/myapp/secure/operation.htm
。
从相对网址更改网址,或根据当前页面动态计算相对网址。 例如,您可以将 URL 更改为基于主机的:
Operation Configuration
上面的响应者在使用c:url生成绝对URL时有一个正确的答案。 但是,在某些情况下,由于防火墙配置,JSTL 无法正确知道 URL 库。 在这种情况下,您可以使用相对 URL,但它必须知道您从哪里开始。 即在页面 obia/secure/operation.htm 上,URL 将是 ../secure/configuration.htm,或只是配置.htm。 点点表示向上遍历一个级别。