我处于一种奇怪的情况,我发现我目前必须使用两种不同的路径命名约定,具体取决于我是在localhost上测试还是将我的应用程序部署到我的域中。
当我运行我的应用时,我在此处访问:localhost:8080/MyApp/welcome
并在我的域中访问:mydomain.com/welcome
在这个欢迎页面(JSP)上,我想链接到另一个页面,比如/ welcome / foobar。如果我的链接是这种风格(请注意pageContext前缀):
<form action="${pageContext.request.contextPath}/welcome/foobar ... >
<button type="submit">Admin Login</button>
</form>
然后在本地,我会被正确地定向到localhost:8080/MyApp/welcome/foobar
。问题是,当我部署并点击我的域上的此链接时,我被错误地指向http://welcome/foobar/
。如果我使用简单的<form action="/welcome/foobar" ... >
路径,我也会收到相反的结果(本地不正确,远程正确)。
有没有人有解决方案来消除这种不匹配?此外,我不完全理解为什么会发生这种情况,所以任何能给我解释的人都会获得奖励。
答案 0 :(得分:3)
首先要了解什么是contextPath
以及为什么使用它。
我们以您的本地网址为例。localhost:8080/MyApp/welcome
这里提供了所有信息..
hostName
= localhost
port
= 8080
contextPath
= MyApp
现在,请使用您的真实环境网址mydomain.com/welcome
hostName
= mydomain.com
port
=默认,即80
contextPath
= /
因此,对于您的域,contextPath只是/
,这是通常配置为缩短URL的方式。使用contextPath的想法是为jsp页面生成相对LINKS。最好与<anchor>
代码一起使用
如果您只想要指向其他网页的链接,则应使用<a href="${pageContext.request.contextPath}/welcome/foobar">Submit </a>