【问题标题】:Understanding context.xml in tomcat 6了解tomcat 6中的context.xml
【发布时间】:2010-12-12 06:36:13
【问题描述】:

我在 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>

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

<?xml version="1.0" encoding="UTF-8"?>
<Context>
        <Parameter name="companyName" value="My Company, Incorporated"  override="false"/>
</Context>

我将此项目导出为 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 编辑为:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Parameter name="companyName" value="My BLAH Company, Incorporated"  override="false"/>
</Context>

我在 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 中更改参数的正确方法是什么?

提前谢谢你。 问候,

【问题讨论】:

  • 我不明白这个问题。我认为您在“当我将 testprojekt.xml 编辑为:”部分之后缺少一些解释性文本。至少我可以说异常消息是相当自我解释的。从字面上理解。
  • 请转义您的代码示例,以便我们看到它们。
  • 请仔细查看这两个 testprojekt.xml 文件。我在第二个字符串的值中添加了一个 BLAH 字符串。我希望,在我更改值之后,我的 web 应用程序将可以访问这些新值。但是我什至不来这部分,因为我保存后出现异常。而且我真的不明白这个例外,或者我的方法有什么问题。

标签: java tomcat6 context.xml


【解决方案1】:

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

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

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

希望对您有所帮助。

【讨论】:

  • 嗯,我也把这个问题放在了tomcat用户邮件列表上,看来这种行为是一个BUG。 issues.apache.org/bugzilla/show_bug.cgi?id=47343 但我想知道,为什么 conf/Catalina/localhost/testprojekt.xml 中的更改会重新部署 webapp?我会猜到,它会重新加载网络应用程序!那么放置数据库配置(例如)的正确位置在哪里?您将改变这一点,而无需停机。我猜。
【解决方案2】:

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

这是导致错误的顺序,

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2015-09-09
    • 2017-10-07
    • 2013-02-28
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多