我有一个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