Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ${pageContext.request.contextPath}在本地工作,但不是远程工作_Java_Html_Jsp_Spring Mvc_Tomcat8 - Fatal编程技术网

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

现在使用您的真实环境URL
mydomain.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>