我的问题是-假设我有一个名为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-app和http://localhost:8080/my-app-123访问该应用程序,这不是一个真正的解决方案。
答案 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