Tomcat使用配置设置应用程序上下文(不是战争名称)

时间:2020-04-16 00:08:37

标签: java tomcat

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

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

是否有一种方法,无需重命名war文件,就可以使应用程序从http://localhost:8080/my-app访问?

首先,我要说的是,我认识到最简单的解决方案是仅命名war文件。我很好奇在Tomcat配置中是否可以做到这一点。

我已经做到了(在server.xml文件的host部分中):

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

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

即使在server.xml中静态定义上下文时,也不得设置此属性,除非docBase不在主机的appBase下,或者deployOnStartup和autoDeploy均为false。如果不遵循此规则,则可能导致双重部署。

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

1 个答案:

答案 0 :(得分:0)

以下内容适用于我使用过的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

在这些情况下,Web应用程序仅在以下位置可用:

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