2010-11-11 69 views
8

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html将tomcat 6.0文件说:Tomcat相关管理

只有一个上下文文件不应用在$CATALINA_BASE/conf/[enginename]/[hostname]//META-INF/context.xml申请文件中存在,在一个单独的文件。如果Web应用程序打包为WAR,则/META-INF/context.xml将被复制到$CATALINA_BASE/conf/[enginename]/[hostname]/并重命名以匹配应用程序的上下文路径。 一旦这个文件存在,如果在主机的appBase中放置了一个新版本的/META-INF/context.xml,那么它将不会被替换。

但是我注意到,如果你在webapp目录提出了新的战争的文件,在META-INF目录context.xml替换$CATALINA_BASE/conf/[enginename]/[hostname]context.xml

是否有任何配置可确保在部署新战争文件时不会覆盖context.xml$CATALINA_BASE/conf/[enginename]/[hostname]/

编辑:我使用自动部署=“真”从JoseK的评论,当Tomcat看到新的战争的文件我的理解,它取消部署旧应用程序(导致环境文件删除),并部署新的战争文件(导致创建新的战争文件)。在这种情况下,来自tomcat文档的上述信息是不相关的。新的问题是否会有上述情况发生的情况?

+0

你如何部署到Tomcat?手动或使用IDE(Eclipse)插件?手动使用 – BalusC 2010-11-11 19:56:59

+0

。我创建了war文件并将其移至webapp目录。 – Hemang 2010-11-11 21:37:05

+1

你在'server.xml'的'host'元素上设置了'autoDeploy'属性吗?尝试将其设置为false。 – matt 2010-11-11 23:08:59

回答

1

如果你想避免覆盖'context.xml',你可以去Tomcat管理器url 然后卸载以前的应用程序并安装新的war/ear。 这样你就可以更好地控制安装过程。

2

我同意该文档具有误导性。通常,这种行为实际上是受欢迎的,因为当您部署新版本的应用程序时,您还希望部署更新后的context.xml文件。如果您计划在生产服务器上手动编辑您的context.xml文件,我建议完全跳过它并将其内容复制到conf/server.xml文件。

快速补丁/解决您的问题(不会做我自己)是为只读标记context.xml文件已部署和更新后的第一次。这种方式Tomcat无法删除/更新它。

+1

为什么Tomcat?你为什么拥抱反模式?查看'tomcat7-maven-plugin'来部署你的war文件和一个单独的context.xml文件来解决这个问题。 http://stackoverflow.com/questions/4032773/why-does-tomcat-replace-context-xml-on-redeploy – 2013-06-11 04:41:33