如何在Tomcat中将多个上下文映射到同一个war文件?

Sel*_*amy 12 mapping tomcat contextpath

我正在使用tomcat来部署我的应用程序,我想部署为一个单一的战争应该服务器多个上下文路径.

目前我有app1.war和app2.war,但两者都有相同的内容,只有通过http:/// app1和http:///app1.war访问的名称不同.但我想这样做,部署app.war并通过app1和app2上下文路径访问它.在tomcat中可以做到吗?请帮我解决这个问题

Chr*_*ltz 20

这可以通过几种方式完成.我认为这种方式最直接:

  1. 将WAR文件移到webapps/自动部署目录之外
  2. META-INF/context.xml从WAR文件中提取.如果你的战争没有一个META-INF/context.xml文件,只用一个文件,只是<Context />在它
  3. 将此文件复制到Tomcat的conf/[service]/[host]/目录中作为app1.xmlapp2.xml.([service]通常是"Catalina",[host]是虚拟主机的名称:在默认的Tomcat配置中,主机名始终是"localhost").
  4. 编辑两者app1.xml并将元素app2.xmldocBase属性设置<Context>为指向您在步骤#1中移动的WAR文件
  5. 重新启动Tomcat

这应该为您提供单个物理WAR文件和从中部署的多个上下文.

虽然Tomcat支持这种配置,但我建议不要这样做:磁盘空间很便宜,它在运行时没有任何变化(你仍然得到内存中所有内容的两个副本),并且你失去了将不同的WAR文件部署到不同的上下文和/或更新的灵活性它们是单独的而不修改两个上下文的配置.

如果您需要我的建议,请坚持使用重复的WAR文件.

  • @Edward您可能想在一个单独的问题中提出这个问题,但是,简单地说:不,使用单个 WAR 文件(或 WAR 结构的目录)不会缩短启动时间。您将为每个上下文获得一个单独的类加载器,并且您的应用程序将无论如何启动 N 次。您可能想研究 Tomcat 中的“并行部署”,它可以同时而不是串行启动您的应用程序,特别是如果您在启动时有可用的备用容量。 (2认同)