【问题标题】:Is it possible to deploy multiple war files under the same deployment path?是否可以在同一个部署路径下部署多个war文件?
【发布时间】:2017-11-14 13:56:21
【问题描述】:

假设我有:

  • foo.war
  • bar.war

是否有可能以某种方式将它们部署到相同的部署路径?例如,访问它:

war 文件的内容是否以某种方式合并?如何处理文件冲突(例如,假设他们都有一个index.jsp 文件)?

谢谢!

【问题讨论】:

  • 请问您为什么考虑这样做?
  • 复杂 :D 拆分一个巨大的遗留应用程序。这可以为我节省大量的回归测试。

标签: java tomcat war


【解决方案1】:

servlet 规范明确禁止这样做。部署的 Web 应用程序可能没有相同或重叠的上下文根。来自 Servlet 3.0 规范,第 10.5 节:

由于应用程序的上下文路径决定了 Web 应用程序内容的 URL 命名空间,因此 Web 容器必须拒绝定义可能导致此 URL 命名空间中潜在冲突的上下文路径的 Web 应用程序。例如,通过尝试使用相同的上下文路径部署第二个 Web 应用程序时,可能会发生这种情况。

【讨论】:

    【解决方案2】:

    是与否。

    我认为不可能以某种方式将它们合并到像 Tomcat 这样的 servlet 容器内的同一文件系统路径中(除非您要编写某种复杂、智能的脚本来这样做)。对于初学者来说,每个 .war 都会有一个 WEB-INF/web.xml 文件,并且每个 .war 都将依赖自己文件的内容来运行——哪个会赢?

    但你可以想象...

    • 部署到 2 个不同的上下文(或容器或主机),并使用某种负载平衡器(硬件或软件)将一些请求路由到一个,将其他请求路由到另一个。
    • 使用“覆盖”策略(例如 Maven Overlays)制作第二个(也是最终的).war,它是另一个 .war 文件的派生和扩展名

    【讨论】:

    • 那么Tomcat会选择部署这两个WAR中的哪一个?
    • 谢谢德鲁,我也有同样的印象。叠加层可以工作。
    • @TimBiegeleisen:WRT Overlay 方法——不是 Tomcat,而是你必须部署 .war 文件。您必须选择(并部署)衍生文件。
    • 澄清第一点 - 如果每个战争都支持一组可识别的 URL 路径,那么位于 Tomcat 前面的 Web 服务器可以路由到相应的 Web 应用程序。例如,/foo/a/b/c 可以路由到 /foo-app/foo/a/b/c 而 /bar/a/b/c 可以路由到 /bar-app/bar/a/b /c.
    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多