将war应用程序名称与war文件名分隔开

目前,如果我在名为myapp.war tomcat上部署war文件,我可以通过http:// localhost / myapp / MyServlet访问其URL。

但是我想要的是在war文件名中部署一个带有版本号的war并且仍然具有相同的url。 例如,我想部署myapp-1.1.0.war并且仍然将URL设置为http:// localhost / myapp / MyServlet

当然我需要不断更新战争,版本号会不断变化,所以我不能在任何地方硬编码war文件名。 我是否可以使用web.xml任何设置来保持应用程序的相同url,而不管war文件名是什么?

解决方案是停止使用Tomcat的自动部署function,该function采用将“上下文名称”(URL的/myapp部分)设置为“.war”之前的WAR文件名部分的快捷方式。

而是自己将WAR内容提取到文件系统,并在TOMCAT_HOME/conf/[enginename]/[hostname]/[contextname].xml中设置XML文件,该文件将所需的上下文路径(例如/myapp )指向该位置。磁盘上的应用程序(例如/opt/webapps/myapp-1.1.0/ )。

Tomcat参考文档很好地解释了Tomcat如何自动部署应用程序,以及如何配置自定义逻辑以将上下文路径映射到应用程序文件位置(除了我建议的那个之外,还有一些其他方法来设置它以上)。

您可以使用YOUR_WAR / META-INF / context.xml。 这是一个示例:

   

使用Maven时,您可以通过执行以下操作来控制部署的路径:

Tomcat的conf / tomcat-users.xml:

          

〜/ .m2 / settings.xml:

 ...  tomcat root root  ... 

pom.xml:

 ... 4.0.0 com.example myapp 1.1.0 war ...    org.codehaus.mojo tomcat-maven-plugin   http://server:8080/manager/html  tomcat /myWebApp   ....   ... 

首先启动tomcat然后构建并部署应用程序..

 mvn clean install tomcat:deploy 

..it可以在http://server:8080/myWebApp

web.xml中没有为此设置。 我不相信有可能以交叉容器的方式在war文件中设置它 – 在规范中没有提到它 – 所以每个容器都以不同的方式做到这一点。 jboss-web.xmlsun-web.xmlcontext.xml等。

我更喜欢使用“ ## ”符号来记录tomcat中* .war文件的版本。
例如:
myapp.war – > URL: http:// localhost:8080 / myapp / MyServlet
myapp##1.1.0 – > URL: http:// localhost:8080 / myapp / MyServlet (仍然相同,因为“ ## ”之后的所有符号都被tomcat忽略)

我遇到了同样的问题,事实上,正如@matt所提到的, Tomcat参考文档很好地解释了Tomcat如何自动部署应用程序,以及如何为上下文路径到应用程序文件位置的映射配置自定义逻辑。

就我而言,我使用了这个建议(在“路径”解释中):

即使在server.xml中静态定义Context,也不能设置此属性(/ path),除非docBase不在Host的appBase下,或者deployOnStartup和autoDeploy都为false 。 如果未遵循此规则,则可能会导致双重部署。

所以在我的情况下,我将deployOnStartupautoDeploy都切换为false,因此我的WAR(egaWAR)没有自动展开到webapps下的’a’目录,而是自动展开到’b’目录,由于这些设置: