尝试在spring 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
。但是如果我在这个页面,并且从这个页面我想要在单击操作链接时到达operation.htm,路径就像这样:http://localhost/obia/secure/secure/operation.htm
。
secure
出现两次。我该如何解决这个问题?
答案 0 :(得分:5)
您的链接是相对的。在它们前面添加斜杠将修复它。
答案 1 :(得分:5)
如果您使用的是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
第一个会生成http://host/secure/operation.htm
,第二个会为您生成http://host/myapp/secure/operation.htm
。
答案 2 :(得分:2)
根据当前页面动态更改您的URL或从动态计算相对URL。您可以将网址更改为基于主机的年龄:
<a href="/obia/secure/operation.htm">Operation</a> <a href="/obia/secure/configuration.htm">Configuration</a>
答案 3 :(得分:0)
上面的响应者在使用c:url生成绝对URL时有一个正确的答案。但是,由于防火墙配置,有些情况下JSTL无法正确了解URL基础。在这种情况下,您可以使用相对URL,但它必须知道您从哪里开始。即在页面obia / secure / operation.htm上,url将是../secure/configuration.htm,或者只是configuration.htm。点点意味着遍历一个级别。