了解tomcat 6中的context.xml

我在eclipse中创建了一个主要空的动态Web项目。

它有

  • 没有servlet
  • 没有jsp文件

web.xml是

  testprojekt  index.html index.htm index.jsp default.html default.htm default.jsp   

我在其META-INF文件夹中添加了一个context.xml

     

我将此项目导出为WAR文件。 具有以下结构:

 user@system:$ tree . |-- META-INF | |-- MANIFEST.MF | `-- context.xml `-- WEB-INF |-- classes |-- lib `-- web.xml 4 directories, 3 files 

当我将项目部署到本地tomcat(Apache Tomcat / 6.0.20)时,一切都按预期工作。 这意味着,context.xml被复制到/ conf / Catalina / localhost并重命名为testprojekt.xml。

当我将testprojekt.xml编辑为:

     

我在catalina.out中看到以下输出:

 02.11.2009 13:21:35 org.apache.catalina.startup.HostConfig checkResources INFO: Undeploying context [/testprojekt] 02.11.2009 13:21:35 org.apache.catalina.core.StandardContext resourcesStart SCHWERWIEGEND: Error starting static Resources java.lang.IllegalArgumentException: Document base /opt/tomcat6/webapps/testprojekt does not exist or is not a readable directory at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142) at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4048) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4217) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1274) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:296) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590) at java.lang.Thread.run(Thread.java:619) 02.11.2009 13:21:35 org.apache.catalina.core.StandardContext start SCHWERWIEGEND: Error in resourceStart() 02.11.2009 13:21:35 org.apache.catalina.core.StandardContext start SCHWERWIEGEND: Error getConfigured 02.11.2009 13:21:35 org.apache.catalina.core.StandardContext start SCHWERWIEGEND: Context [/testprojekt] startup failed due to previous errors 02.11.2009 13:21:35 org.apache.catalina.core.StandardContext stop INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/testprojekt] has not been started 

这是为什么? 这是预期的结果吗? 在context.xml更改参数的正确方法是什么?

先谢谢你。 问候,

我认为这是Tomcat中的一个错误。 我提交了一份错误报告,但他们声称它按设计工作。 Tomcat有3种部署模式:Directory,WAR和Context Fragment。 在您的情况下,重新加载时会感到困惑。

这是导致错误的序列,

  1. 部署WAR时,上下文片段(META-INF / context.xml)将复制到conf / Catalina / [host]目录。
  2. 修改片段时,它会正确检测到更改,因此会触发重新部署。
  3. 但是,它会忘记这是一个WAR部署,并将其视为目录部署。 该目录由undelpoy删除,因此您收到错误。

如果您只更改META-INF中的XML,那么一切都应该适合您。

你的问题有点模棱两可,但我会试一试。

删除您编辑的textprojekt.xml,在项目的context.xml中进行相同的更改,然后重新启动tomcat。

它可能是由两个xml文件之间的冲突引起的。 更改tomcat创建的xml文件不会更改webapp的context.xml文件。 至少它在我用于开发工作的tomcat6.0.18上没有改变。

希望这很有帮助。