0

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

我通过以下方式访问我的本地 tomcat 应用程序

  • http://localhost:8080/SpringMVC

在 cloudbees 中,我通过以下方式访问它

到目前为止一切顺利,但问题是当我尝试提交时。在本地,这成功提交给

  • http://localhost:8080/SpringMVC/HelloWorld

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

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

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

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

一切正常。

我在这里看到了一个类似的问题,但建议的解决方案是

  1. 更新 web.xml 以使用前缀路径(例如,我认为 /SpringMVC 在我的情况下),但这会破坏我的本地 tomcat 版本,或者
  2. 将应用程序部署为带有 application.xml 的 EAR 文件 - 但迁移到 EE 容器(如 tomcat EE 或 JBoss)将是一项更大的任务。

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

非常感谢任何帮助!

肖恩

4

2 回答 2

2

Web 应用程序永远不应该使用绝对路径,并且总是使用 ServletContext.getContextPath() 构建 URL。我想知道你遇到了这个问题,假设你使用 SpringMVC 为你处理这个问题。

或者,也许您硬编码了一些资源路径,但应该使用它来生成足够的路径,或者使用 scriptlet 来附加上下文路径:

<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">

另请参阅JSP 中的 Spring MVC 请求 URL

于 2012-09-13T09:14:43.157 回答
0

CloudBees 使用 ROOT 上下文路径 [/] 运行您的应用程序。您至少有两个选项可以让您的应用同时在本地环境和云环境中运行:

  • 使用 ROOT 上下文在本地运行您的应用程序(通过将应用程序部署到 webapps/ROOT 或 webapos/ROOT.war)
  • 使用 request.getContextPath() 更改用于生成表单的 URL 以构造表单的操作路径
于 2012-09-13T03:02:37.893 回答