一尘不染

Tomcat 7上下文参数覆盖

tomcat

我试图通过在以下位置创建context.xml文件来覆盖应用程序的web.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则可以使用。

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


阅读 216

收藏
2020-06-16

共1个答案

一尘不染

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

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

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

  • 在应用程序文件内/META-INF/context.xml中的单个文件中。(可选)(基于主机的copyXML属性),可以将其复制到$
    CATALINA_BASE / conf / [引擎名称] / [主机名称] /,并重命名为应用程序的基本文件名加上“ .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

这应该工作。我刚刚测试过。

myapp.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不在主机的appBase下,或者deployOnStartup和autoDeploy均为false
。如果不遵循此规则,则可能导致双重部署。

2020-06-16