【问题标题】:How to deploy apps in tomcat server如何在tomcat服务器中部署应用程序
【发布时间】:2016-12-23 15:11:20
【问题描述】:

我想在 tomcat 服务器上部署 myapp。我知道一种方法是从 webapps 中删除 Root 文件夹并将我的 app.war 重命名为 ROOT.WAR。但我不想这样做。我想像当用户以 www.xxx.com 访问我的应用程序时那样进行部署,它应该像 www.xxx.com/login.html 一样转到我的应用程序。 请帮忙

【问题讨论】:

标签: tomcat tomcat8


【解决方案1】:

只要不与任何自动部署的应用程序冲突,您可以从(几乎)任何地方使用您想要的任何上下文名称部署任何 WAR 文件(或展开的 WAR 目录)。方法如下:

  1. webapps/ 中删除所有有冲突的应用程序(在这种情况下,实际上只是ROOT

  2. 将您自己的应用程序移至webapps/以外的其他位置

  3. 从您的应用程序中复制META-INF/context.xml 文件并将其放入Tomcat 的conf/[engine]/[host]/[contextpath].xml - 例如conf/Catalina/localhost/ROOT.xml

  4. 编辑conf/[engine]/[host]/[contextpath].xml 并将此属性添加到<Context> 元素:

    docBase="/path/to/your/WAR.war"

现在,Tomcat 将在上下文路径/ 上部署/path/to/your/WAR.war(因为部署描述符的文件名为ROOT),您不必修改conf/server.xml

谁在乎修改conf/server.xml?好吧,该文件仅在容器启动期间读取一次,因此如果您想要进行更改、取消部署、重新部署等,您必须重新启动整个容器以获取这些更改。最好使用 Tomcat 的自动部署工具,您可以看到它非常灵活。

所有这些都在Tomcat's documentation on defining contexts 中列出,顺便说一句,第一句话清楚地表明在server.xml 中定义上下文是一种不好的做法。

【讨论】:

  • 我知道这是一个旧答案,但即使这样做,我的应用程序仍部署在 localhost:port/myapp 而不是 localhost:port/。这是在 Tomcat 9.0.20 上。我正在从 webapps 中删除 ROOT,将 myapp.war 复制到自定义位置的 tomcat/app,将 myapp.xml 复制到包含 <Context docBase="/usr/local/tomcat/app/myapp.war"></Context>/usr/local/tomcat/conf/Catalina/localhost/。你能帮我弄清楚我做错了什么吗?
  • @SajibAcharya 您需要将 XML 文件命名为 ROOT.xml 而不是 myapp.xml。 Tomcat 从 XML 文件的名称派生上下文路径,名称ROOT.xml 使用零长度字符串作为上下文路径进行特殊处理。
  • 我试过这个,在我完成这些步骤并部署我的战争之后,Tomcat的Web App Manager列表页面下会出现2个新应用程序,一个名为“myapp”,一个名为“/”根。但是,根应用程序未启动且不起作用。 “myapp”一个像往常一样工作。我尝试调整 ROOT.xml 中的路径,但没有运气。取消部署也会删除 ROOT.xml。我会尝试阅读那个 Tomcat 页面,但可能需要每次都重命名为 ROOT.war,这看起来很奇怪,但效果很好。
  • 如果你把你的WAR文件放到Tomcat的自动部署webapps目录下,那么如果你使用这个答案中详述的方法,它将被部署两次。请注意,在第 2 步中它说 将您自己的应用程序移动到 webapps/ 以外的其他位置
  • @ChristopherSchultz 您能否详细说明为什么您提出的解决方案比将 ROOT.war 放在webapps 文件夹中更好?使用ROOT.war 是。到目前为止,它要简单得多,因此有助于理解为什么我们应该支持上述更复杂的解决方案。
【解决方案2】:

您有几个选项来设置根应用程序。 (见https://stackoverflow.com/a/5328636/6371459

  1. 删除 ROOT 目录并将您的战争部署为 ROOT.war

  2. webapps 中部署您的war 并在conf/server.xml 中配置上下文根以使用您的war 文件(not recommended 因为需要重新启动)

  3. 创建一个特定的上下文文件$CATALINA_BASE/conf/[enginename]/[hostname]/ROOT.xml 并像之前的2) 一样设置docBase=your_war_name(参见@ChristopherShultz 答案)

由于你已经放弃了选项1,不推荐选项2,我建议使用上下文文件

【讨论】:

  • server.xml 中配置Context 是个坏主意。
  • 为什么选择@ChristopherSchultz?我可以同意,但如果 OP 不想将战争重命名为 ROOT,则没有太多选择。如果您认为此选项不适用,我认为您应该在链接的其他选项中包含您自己的答案,而不是将其标记为重复。 6 个赞成的答案中有 5 个提供了相同的技术,只有一个负面评论
【解决方案3】:
猜你喜欢
  • 1970-01-01
  • 2023-02-20
  • 2020-02-01
  • 2018-06-07
  • 2019-06-14
  • 2020-07-18
  • 2020-11-27
  • 1970-01-01
  • 2012-06-23
相关资源
最近更新 更多