5

我试图通过在我的应用程序的 web.xml 文件中创建一个 context.xml 文件来覆盖一个参数<tomcatHome>/conf/Catalina/localhost

context.xml 文件看起来像

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp">    
    <Parameter name="port" value="100" override="1"/>
</Context>

但我收到一条错误消息

java.lang.IllegalArgumentException: Document base <path-to-tomcat> apache-tomcat-7.0.35/webapps/context does not exist or is not a readable directory

如果我<Parameter name="port" value="100" override="1"/>直接把它放在里面context.xml<tomcat-home>/context.xml那么它就可以工作了。

有人可以解释我做错了什么吗?

4

1 回答 1

8

这是因为没有名为context的应用程序上下文。换句话说,没有将名称上下文部署到webapps目录的 Web 应用程序。

形成与定义上下文相关的官方 Tomcat 7 文档:

可以明确定义各个上下文元素:

  • 在应用程序文件内 /META-INF/context.xml 的单个文件中。或者(基于主机的 copyXML 属性)可以将其复制到 $CATALINA_BASE/conf/[enginename]/[hostname]/ 并重命名为应用程序的基本文件名加上“.xml”扩展名。

  • 在 $CATALINA_BASE/conf/[enginename]/[hostname]/ 目录中的单个文件(带有“.xml”扩展名)中。上下文路径和版本将从文件的基本名称(文件名减去 .xml 扩展名)派生。此文件将始终优先于打包在 Web 应用程序的 META-INF 目录中的任何 context.xml 文件。

  • 在主 conf/server.xml 的 Host 元素中。

因此,要使其正常工作,请将您的自定义文件命名为不是context.xml,而是your_app_name.xml
在您的情况下,它将是(如果我理解正确的话)myapp.xml

这应该有效。我刚刚测试过了。

我的应用程序.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context>    
    <Parameter name="port" value="100" override="1"/>
</Context>

附言

而且你可以得到没有路径属性,所以不要包含它。
Apache Tomcat 7 文档

仅当在 server.xml 中静态定义 Context 时才必须使用此属性。在所有其他情况下,将从用于 .xml 上下文文件或 docBase 的文件名推断路径。

即使在 server.xml 中静态定义 Context 时,也不得设置此属性,除非 docBase 不在 Host 的 appBase 下,或者 deployOnStartup 和 autoDeploy 都为 false。如果不遵守此规则,很可能导致双重部署。

于 2013-02-05T01:54:19.917 回答