我可以在不同路径上部署相同 war 的不同版本吗?
Can I deploy different versions of the same war on different paths?
我想在同一 Tomcat 的不同路径上部署 .war
的多个版本。例如,我希望 old.war
为 /
上的请求提供服务,然后 new.war
为 /new/
下的请求提供服务。
war
将包含相同代码的不同版本,因此大部分相同 packages/classes。这也意味着它们将服务于相同的端点,但自然具有不同的前缀(例如,当请求来自 /someendpoint
时,它应该由 old.war
提供,而当另一个请求来自 /new/someendpoint
时, 它应该由 new.war
).
提供
简单的答案是肯定的。将它们命名为 ROOT.war 和 new.war。
使用 ROOT.war 时会变得复杂,因为所有 url 引用都包含空上下文
someserver/someendpoint
但是 new.war 在所有路径中都会有 "new"
someserver/new/someendpoint
我的方法是始终对应用程序使用相对 url 引用,或者使用服务器设置应用程序范围的变量作为上下文名称,然后使用
servletContext.setAttribute("cp", contextPath);
${cp}/someendpoint 在生成的 urls.
如果不使用 ROOT.war 而是使用 old.war 和 new.war 会更容易。
是的,这绝对有可能。唯一要注意的是 war 的两个名字不应该相等。
一个好的策略是对您的 war 使用命名约定。例如:project_0_0_1.war,下一个为 project_0_0_2.war,依此类推。然后您将能够部署不同的版本并使用所有版本
我想在同一 Tomcat 的不同路径上部署 .war
的多个版本。例如,我希望 old.war
为 /
上的请求提供服务,然后 new.war
为 /new/
下的请求提供服务。
war
将包含相同代码的不同版本,因此大部分相同 packages/classes。这也意味着它们将服务于相同的端点,但自然具有不同的前缀(例如,当请求来自 /someendpoint
时,它应该由 old.war
提供,而当另一个请求来自 /new/someendpoint
时, 它应该由 new.war
).
简单的答案是肯定的。将它们命名为 ROOT.war 和 new.war。
使用 ROOT.war 时会变得复杂,因为所有 url 引用都包含空上下文
someserver/someendpoint
但是 new.war 在所有路径中都会有 "new"
someserver/new/someendpoint
我的方法是始终对应用程序使用相对 url 引用,或者使用服务器设置应用程序范围的变量作为上下文名称,然后使用
servletContext.setAttribute("cp", contextPath);
${cp}/someendpoint 在生成的 urls.
如果不使用 ROOT.war 而是使用 old.war 和 new.war 会更容易。
是的,这绝对有可能。唯一要注意的是 war 的两个名字不应该相等。
一个好的策略是对您的 war 使用命名约定。例如:project_0_0_1.war,下一个为 project_0_0_2.war,依此类推。然后您将能够部署不同的版本并使用所有版本