【问题标题】:Cloudbees virtual host versus tomcat context pathCloudbees 虚拟主机与 tomcat 上下文路径
【发布时间】:2012-09-05 14:57:24
【问题描述】:

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

我通过

访问我的本地 tomcat 应用程序
  • http://localhost:8080/SpringMVC

在 cloudbees 中,我通过

访问它

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

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

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

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

如果我手动修改浏览器网址为

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

一切正常。

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

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

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

非常感谢任何帮助!

肖恩

【问题讨论】:

    标签: tomcat cloudbees


    【解决方案1】:

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

    • 使用 ROOT 上下文在本地运行您的应用程序(通过将应用程序部署到 webapps/ROOT 或 webapos/ROOT.war)
    • 更改用于生成表单的 URL,以使用以下方法构建表单的操作路径 request.getContextPath()

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

      • 感谢您的回答(和链接)尼古拉斯。 swashbuck1r 的回答也很有用。按照建议,解决方案只是将我的表单操作从
        更改为
        非常感谢,肖恩
      猜你喜欢
      • 2011-01-15
      • 2020-01-23
      • 2013-05-27
      • 2014-09-08
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 2012-06-21
      • 2023-03-04
      相关资源
      最近更新 更多