【问题标题】:Tomcat set application context using configuration (not war name)Tomcat 使用配置设置应用程序上下文(不是战争名称)
【发布时间】:2020-07-29 02:58:44
【问题描述】:

我的问题是——假设我有一个名为 my-app-123.war 的战争文件。我想将它部署在 Tomcat 服务器(9.0.x)上,让它自动解包。

然后http://localhost:8080/my-app-123 可以访问该应用程序

有没有办法在不重命名war文件的情况下使应用程序可以从http://localhost:8080/my-app访问?

我会先说我意识到最简单的解决方案就是命名 war 文件。我很好奇是否有办法在 Tomcat 配置中做到这一点。

我已经这样做了(在我的 server.xml 文件的主机部分中):

<Context path="/my-app" docBase="my-app-123"></Context>

但我在路径变量描述中在线阅读(https://tomcat.apache.org/tomcat-7.0-doc/config/context.html):

即使在 server.xml 中静态定义 Context 时,也不得设置此属性,除非 docBase 不在 Host 的 appBase 下,或者 deployOnStartup 和 autoDeploy 都为 false。如果不遵守这个规则,很可能导致双重部署。

我现在可以通过http://localhost:8080/my-apphttp://localhost:8080/my-app-123 访问该应用程序,这不是一个真正的解决方案。

【问题讨论】:

    标签: java tomcat


    【解决方案1】:

    以下适用于我使用过的 Tomcat 部署 - 不存在双重部署问题。

    在我将在这里使用的示例中,我在TomcatDemo-1.0-SNAPSHOT.war 中有一个简单的“hello world”webapp。它部署在 Tomcat 9.0 的标准位置(webapps 目录)。

    我希望应用程序的上下文路径为/my-foo-app

    我在server.xml 中使用以下上下文条目:

    <Context path="/my-foo-app" docBase="TomcatDemo-1.0-SNAPSHOT.war"></Context>
    

    我还在server.xml中使用了以下内容:

    <Host name="localhost" 
          appBase="webapps" 
          deployOnStartup="true"
          deployIgnore="TomcatDemo-1.0-SNAPSHOT.war" 
          unpackWARs="true" 
          autoDeploy="false">
    

    这里重要的项目是deployIgnore。这里有描述:

    https://tomcat.apache.org/tomcat-9.0-doc/config/host.html#Automatic_Application_Deployment

    使用自动部署时,由 XML 上下文文件定义的 docBase 应位于 appBase 目录之外。如果不是这种情况,部署 Web 应用程序可能会遇到困难,或者应用程序可能会部署两次。可以使用 deployIgnore 属性来避免这种情况。

    或者,如果您不介意自动启动部署,您可以设置deployOnStartup="false" - 在这种情况下您不需要deployIgnore

    在这些情况下,网络应用仅在此处可用:

    http://localhost:8080/my-foo-app/   <-- OK
    

    否则,正如您所注意到的,通过双重部署,Web 应用程序也将在此处可用(您会在 webapps 中看到两个展开的目录):

    http://localhost:8080/TomcatDemo-1.0-SNAPSHOT/  <-- BAD!
    

    希望对您有所帮助。

    最后,它可能会变得有点复杂,有各种自动部署选项。本页提供了一组汇总表和说明:

    https://tomcat.apache.org/tomcat-9.0-doc/config/automatic-deployment.html

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 2016-12-04
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      相关资源
      最近更新 更多