【发布时间】:2017-11-14 13:56:21
【问题描述】:
假设我有:
foo.warbar.war
是否有可能以某种方式将它们部署到相同的部署路径?例如,访问它:
war 文件的内容是否以某种方式合并?如何处理文件冲突(例如,假设他们都有一个index.jsp 文件)?
谢谢!
【问题讨论】:
-
请问您为什么考虑这样做?
-
复杂 :D 拆分一个巨大的遗留应用程序。这可以为我节省大量的回归测试。
假设我有:
foo.warbar.war是否有可能以某种方式将它们部署到相同的部署路径?例如,访问它:
war 文件的内容是否以某种方式合并?如何处理文件冲突(例如,假设他们都有一个index.jsp 文件)?
谢谢!
【问题讨论】:
servlet 规范明确禁止这样做。部署的 Web 应用程序可能没有相同或重叠的上下文根。来自 Servlet 3.0 规范,第 10.5 节:
由于应用程序的上下文路径决定了 Web 应用程序内容的 URL 命名空间,因此 Web 容器必须拒绝定义可能导致此 URL 命名空间中潜在冲突的上下文路径的 Web 应用程序。例如,通过尝试使用相同的上下文路径部署第二个 Web 应用程序时,可能会发生这种情况。
【讨论】:
是与否。
我认为不可能以某种方式将它们合并到像 Tomcat 这样的 servlet 容器内的同一文件系统路径中(除非您要编写某种复杂、智能的脚本来这样做)。对于初学者来说,每个 .war 都会有一个 WEB-INF/web.xml 文件,并且每个 .war 都将依赖自己文件的内容来运行——哪个会赢?
但你可以想象...
【讨论】: