Java Tomcat 7中WAR文件中的上下文根配置
如何配置Tomcat 7以允许WAR文件指定其自己的上下文根,而不是基于WAR文件名?示例:我有A-1.0.0.war和B-1.0.0.war,我想将两者部署到同一个Tomcat实例。部署完成后,我希望将浏览器指向localhost:8080/portal并查看A-1.0.0.war中的内容,并且我希望将rest请求卷曲到localhost:8080/rest/v1/helloworld,其实现来自B-1.0.0.war 我四处搜寻并尝试配置不同的方式,但没有一种能够产生我想要的上述场景。此外,我发现Tomcat文档有点过于稀疏,无法完全理解。我读过: 消化这些内容后,在%CATALINA_HOME%/conf/server.xml中,我有一个单一主机条目:Java Tomcat 7中WAR文件中的上下文根配置,java,maven,tomcat7,war,Java,Maven,Tomcat7,War,如何配置Tomcat 7以允许WAR文件指定其自己的上下文根,而不是基于WAR文件名?示例:我有A-1.0.0.war和B-1.0.0.war,我想将两者部署到同一个Tomcat实例。部署完成后,我希望将浏览器指向localhost:8080/portal并查看A-1.0.0.war中的内容,并且我希望将rest请求卷曲到localhost:8080/rest/v1/helloworld,其实现来自B-1.0.0.war 我四处搜寻并尝试配置不同的方式,但没有一种能够产生我想要的上述场景。此外,
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
deployXML="true" copyXML="true" >
<Context path="/portal" docBase="/www/" reloadable="true" swallowOutput="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Logger className="org.apache.catalina.logger.FileLogger" prefix="www-sample-com-log." suffix=".txt" timestamp="true"/>
</Context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
如果有帮助的话,这里有一些我的背景故事。我的目标是将捆绑在单个.jar中的应用程序移动到两个.war文件中。目前,它是一个maven项目,生成一个jar作为其构建工件,包含SpringMVC和JSP应用程序。我的客户机正在使用java在命令行上启动应用程序。我想说的是在我们的开发服务器上安装Tomcat 7,有人可以通过Tomcat的管理控制台部署WAR文件。我还想在战争的文件名中添加一个版本号,以便处理战争的人员清楚地知道他们正在部署什么。在每个构建/发布周期中,我希望他们取消部署旧的war并部署新的war。作为旁注-这是我第一次尝试将应用程序部署为war,我可能错过了一些这样做的最佳实践,因此如果这不是一个好方法,请纠正我。我个人不使用
管理器
应用程序来安装应用程序,我手动配置Tomcat,因此,我不能说如何使用manager
app来实现这一点,但这里介绍了如何独立于war文件名来控制app上下文路径
首先,不建议将
放在server.xml
中(请参阅)。您应该在../conf/Catalina/localhost
文件夹中创建上下文XML文件
因此,以下是步骤:
/mywars/A-1.0.0.war
../conf/Catalina/localhost/portal.xml
:
<Context docBase="/mywars/A-1.0.0.war" reloadable="true" swallowOutput="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="www-sample-com-log." suffix=".txt" timestamp="true"/>
</Context>
请注意,它没有path
属性。上下文路径由文件名确定,即/portal
如果您的webapp使用Servlet Init参数(您使用
元素中的
元素进行配置),那么您甚至可以在单个Tomcat实例中的不同上下文路径下多次安装相同的webapp(war文件),每个路径的配置都不同,只需在../conf/Catalina/localhost
文件夹中创建多个XML文件。谢谢您的回答。这揭示了我完全遗漏的一点,即Tomcat将在其conf/Catalina/localhost/
文件夹中查找xml文件。现在我明白了conf//
在文档中的含义。我明天回去工作时会试试这个。但我还有一个问题-如果下个月我想在旧的1.0.0版本上部署一个-2.0.0.war,我是否需要添加另一个
(或更改现有的一个)以匹配新war文件的名称?现在我认为将版本号放在WAR文件名中是个坏主意……除非您想使用不同的上下文路径保持两个版本都运行,否则只需更新现有xml文件的docBase
。
A-1.0.0/
B-1.0.0/
docs/
examples/
host-manager/
manager/
ROOT/
sample/
A-1.0.0.war
B-1.0.0.war
sample.war
<Context docBase="/mywars/A-1.0.0.war" reloadable="true" swallowOutput="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="www-sample-com-log." suffix=".txt" timestamp="true"/>
</Context>