Java ${pageContext.request.contextPath}在本地工作,但不是远程工作
我遇到了一个奇怪的情况,我发现我目前必须使用两种不同的路径命名约定,这取决于我是在本地主机上测试还是我的应用程序部署到我的域中 在本地运行我的应用程序时,我在这里访问它:Java ${pageContext.request.contextPath}在本地工作,但不是远程工作,java,html,jsp,spring-mvc,tomcat8,Java,Html,Jsp,Spring Mvc,Tomcat8,我遇到了一个奇怪的情况,我发现我目前必须使用两种不同的路径命名约定,这取决于我是在本地主机上测试还是我的应用程序部署到我的域中 在本地运行我的应用程序时,我在这里访问它:localhost:8080/MyApp/welcome,在我的域上,在这里:mydomain.com/welcome 在这个欢迎页面(JSP)上,我想链接到另一个页面,比如/welcome/foobar。如果我的链接是这种样式(请注意pageContext前缀): 首先要了解什么是contextPath,以及为什么要使用它 让
localhost:8080/MyApp/welcome
,在我的域上,在这里:mydomain.com/welcome
在这个欢迎页面(JSP)上,我想链接到另一个页面,比如/welcome/foobar。如果我的链接是这种样式(请注意pageContext前缀):
首先要了解什么是contextPath
,以及为什么要使用它
让我们以您的本地URL为例<代码>本地主机:8080/MyApp/welcome
此处提供的所有信息
hostName
=localhost
端口
=8080
contextPath
=MyApp
现在使用您的真实环境URLmydomain.com/welcome
hostName
=mydomain.com
端口
=默认值,即80
contextPath
=/
因此,对于您的域,contextPath只是
/
,这是通常配置为缩短URL的方式。使用contextPath背后的思想是为jsp页面生成相对链接。它最好与
一起使用,不幸的是,使用“${pageContext.request.contextPath}/welcome/foobar”
解析为路径为“//welcome/foobar”,而不是“/welcome/foobar”,即使嵌套在锚标记中也是如此。感谢您对URL的剖析,这很有意义。请检查为您的域指定的上下文路径。我相信它只是一个“/”,这就是为什么你会看到一个双斜杠。您应该使用类似于${pageContext.request.contextPath}欢迎/foobar
<form action="${pageContext.request.contextPath}/welcome/foobar ... >
<button type="submit">Admin Login</button>
</form>