我有一个Web应用程序,该应用程序在tomcat中本地运行,并且也已部署到Cloudbees。但是,使用虚拟主机的cloudbees与使用上下文路径的本地tomcat相比,存在一些问题。

我通过访问我的本地tomcat应用程序


http://localhost:8080/SpringMVC


在cloudbees中,我通过


http://springmvc.shaunabram.cloudbees.net


到目前为止,一切都很好,但是问题是当我尝试进行提交时。在本地,这成功提交给


http://localhost:8080/SpringMVC/HelloWorld


但是在cloudbees上,它尝试(失败)提交给


http://springmvc.shaunabram.cloudbees.net/SpringMVC/HelloWorld


如果我手动将浏览器URL修改为


http://springmvc.shaunabram.cloudbees.net/HelloWorld


一切正常。

我看到了类似的问题posted here,但是建议的解决方案是


更新web.xml以使用前缀路径(例如,我认为
/ SpringMVC(对于我来说),但这会破坏我的本地tomcat版本,或者
使用application.xml将应用程序部署为EAR文件-但是
    迁移到tomcat EE或JBoss之类的EE容器将非常困难
    更大的任务。


我以为解决方案可能是使用CloudBees Web配置文件以某种方式配置应用程序以将http://springmvc.shaunabram.cloudbees.net/SpringMVC用作我的基本URL,但是我看不到任何示例(所有CloudBees Web配置文件示例似乎用于特定于环境的数据源)。

任何帮助,不胜感激!

肖恩

最佳答案

Web应用程序不应使用绝对路径,而应始终使用ServletContext.getContextPath()构建URL。我不知道您是否遇到了这个问题,假设您使用为您处理此问题的SpringMVC。

或者,也许您对一些资源路径进行了硬编码,但是应该使用它来生成适当的路径,或者使用脚本来附加上下文路径:

<c:url value="/style.css" var="url" />
<link rel="stylesheet" href="${url}" type="text/css">


要么

<link rel="stylesheet" href="${pageContext.request.contextPath}/style.css" type="text/css">


另见Spring MVC Request URLs in JSP

10-08 14:34