为什么tomcat像删除我的context.xml文件?

我正在开发一个基于Web的Java应用程序,(显然)必须在开发过程中在本地运行。 我已经find了Tomcat文档,并在/etc/tomcat6/Catalina/localhost/有一个合适的context.xml文件,但是每/etc/tomcat6/Catalina/localhost/ ,Tomcat就决定删除它! 这意味着我必须把它放回去,重新启动Tomcat。

为什么这样做? 我已经search了关于它的Tomcat文档,并没有更聪明。

(哦是的:它实际上不是被称为context.xml而是owners.xml因为这是该应用程序的HTTPpath前缀。)

更新

我现在看到了Tomcat 在Tomcat运行的时候删除了这个文件。 我想我需要提交一个bug …

快速总结 :有几个条件(如更改war文件,删除webapp或replace为新的内容),在这些条件下,tomcat将取消部署上下文(包括删除上下文文件)。

详细信息 :tomcat是否执行autoDeployment(意味着检查.xml描述符中的更改以及检查webapp目录中的更改)是由以下方面驱动的:

  1. 位于$ CATALINA_HOME / conf / server.xml部分的server.xml:

    <Host name =“localhost”appBase =“webapps”unpackWARs =“true” autoDeploy =“true” xmlValidation =“false”xmlNamespaceAware =“false”>

  2. 你也可以在你的上下文文件中设置这个属性来重载这个值

autoDeploy = true的情况下引用文档以处理案例可能会导致您的上下文文件被删除:

  • 删除WAR文件将触发应用程序的取消部署, 并删除任何关联的展开目录,上下文文件和工作目录。
  • 删除目录将触发应用程序的取消部署, 同时删除任何关联的上下文文件和工作目录。
  • 更新WAR文件将触发应用程序的取消部署, 并删除任何关联的展开目录,上下文文件和工作目录。
  • 更新目录(而不是目录内容)将触发应用程序的取消部署, 同时删除任何关联的上下文文件和工作目录。

详尽的细节 : http : //tomcat.apache.org/tomcat-6.0-doc/config/host.html#Automatic%20Application%20Deployment

如果您不需要autoDeployfunction,例如在生产环境中,可以考虑conf / Catalina / localhost上下文文件中的以下属性:

  • 自动部署=“假”
  • 和deployXML =“false”

autoDeploy =“false”可能无法单独工作,因为应用程序context.xml(在META-INF中)可以覆盖autoDeploy的server.xml设置。

  • 应用程序的META-INF / context.xml将在开发环境中与autoDeploy一起使用
  • 生产中的conf / Catalina / localhost上下文,没有autoDeploy。

deployXML属性文档属性文档值得一读(§标准实现)。

详尽的autoDeploy用户案例,当上下文被删除:即应用程序被取消部署,用户案例logging可以在这里find。

无法回答为什么位。

但是, 此链接指出您可以通过在server.xml设置autoDeploy="false"来停止此操作

我真的不知道Tomcat背后的原因是什么,但是尝试将下面的XML属性添加到您的上下文元素

 reloadable="false" 

所以你的上下文可能看起来像这样:

 <Context path="/" docBase="/some/path/name" reloadable="false"> <!-- Context related stuff --> </Context> 

这应该让Tomcat删除文件

有时需要在服务器上有不同的应用程序值,例如存储上传文件的path。 在开发者环境中,我们有这样的东西:

 <?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" reloadable="false"> <Parameter name="rutaTrabajo" value="C:\Larry\Proyectos\app\rutaTrabajoxx" override="true"/> </Context> 

但在服务器的path是不同的:

 <?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" > <Parameter name="rutaTrabajo" value="/usr/share/App/rutaTrabajo" override="true"/> </Context> 

我也有同样的问题,tomcat从conf / Catalina / localhost删除context.xml(meapp.xml)

为了解决我使用context.xml.default,在相同的path中创build一个名为context.xml.default的文件,并在一个putconfiguration我想要举行:

  cat context.xml.default <?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" > <Parameter name="rutaTrabajo" value="/usr/share/ParkiMeApp/rutaTrabajo" override="true"/> </Context> 

所以,当重新部署应用程序时,确认参数仍然存在。

我意识到这是一个古老的线索,但我想我会分享我发现解决这个问题…

我一直有问题,我的桌面版本的tomcat的context.xml文件得到破坏,每次我会为我的应用程序部署战争文件的新副本。

这个问题是由于我直接在文件系统上修改这个文件。 解决这个问题的方法是通过Eclipse编辑器编辑context.xml文件。 在我的Eclipse里面,有一个“servers”项目,一旦你展开它,你可以看到一些文件,比如context.xml和server.xml。 看来,如果你从这里修改文件而不是出去到文件系统,你的修改是保留的。

我在以下线程中find了此解决scheme: https : //www.liferay.com/community/forums//message_boards/message/16511799

我希望这可以帮助别人!

-StephenS