了解tomcat 6中的context.xml

Car*_*ten 6 java tomcat6 context.xml

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

它有

  • 没有servlet
  • 没有jsp文件

web.xml是

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>testprojekt</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)

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

<?xml version="1.0" encoding="UTF-8"?>
<Context>
        <Parameter name="companyName" value="My Company, Incorporated"  override="false"/>
</Context>
Run Code Online (Sandbox Code Playgroud)

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

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

4 directories, 3 files
Run Code Online (Sandbox Code Playgroud)

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

当我将testprojekt.xml编辑为:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Parameter name="companyName" value="My BLAH Company, Incorporated"  override="false"/>
</Context>
Run Code Online (Sandbox Code Playgroud)

我在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
Run Code Online (Sandbox Code Playgroud)

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

先感谢您.问候,

ZZ *_*der 2

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

这是导致错误的序列,

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

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