$ {pageContext.request.contextPath}在本地工作,但不是远程工作

时间:2015-01-10 06:36:53

标签: java html jsp spring-mvc tomcat8

我处于一种奇怪的情况,我发现我目前必须使用两种不同的路径命名约定,具体取决于我是在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" ... >路径,我也会收到相反的结果(本地不正确,远程正确)。

有没有人有解决方案来消除这种不匹配?此外,我不完全理解为什么会发生这种情况,所以任何能给我解释的人都会获得奖励。

1 个答案:

答案 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>