假设我有:
-
foo.war
-
bar.war
我是否有可能以某种方式将它们都部署到同一部署路径? 例如,在以下位置访问它:
- http://localhost/baz
战争文件的内容是否以某种方式合并?如何处理文件冲突(例如,假设它们都有一个index.jsp
文件(?
谢谢你!
servlet 规范明确禁止这样做。 已部署的 Web 应用程序可能没有相同或重叠的上下文根。 来自 Servlet 3.0 规范的第 10.5 节:
由于应用程序的上下文路径决定了 Web 应用程序内容的 URL 命名空间,因此 Web 容器必须拒绝定义可能导致此 URL 命名空间中潜在冲突的上下文路径的 Web 应用程序。例如,尝试部署具有相同上下文路径的第二个 Web 应用程序可能会发生这种情况。
Yes & No.
我认为不可能以某种方式将它们合并到像 Tomcat 这样的 servlet 容器中的相同文件系统路径中(除非您要编写某种复杂、智能的脚本来执行此操作(。 首先,每个.war都会有一个WEB-INF/web.xml
文件,每个文件都将依靠自己文件的内容来运行 - 哪个会赢?
但你可以想象...
- 部署到 2 个不同的上下文(或容器或主机(,并使用某种负载均衡器(硬件或软件(将一些请求路由到一个,将其他请求路由到另一个。
- 使用"覆盖"策略(例如Maven Overlays(制作第二个(也是最后一个(.war,它是另一个.war文件的衍生和扩展