我试图通过在以下位置创建context.xml文件来覆盖应用程序的web.xml文件中的参数 <tomcatHome>/conf/Catalina/localhost
<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则可以使用。
<Parameter name="port" value="100" override="1"/>
context.xml
<tomcat-home>/context.xml
有人可以解释我做错了什么吗?
这是因为没有名称 上下文 为此类应用程序 上下文 。换句话说,没有将名称 上下文 部署到 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元素内。
各个上下文元素可以明确定义:
在应用程序文件内/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 。如果不遵循此规则,则可能导致双重部署。
仅当在server.xml中静态定义Context时,才必须使用此属性 。在所有其他情况下,将从用于.xml上下文文件或docBase的文件名中推断出路径。
即使在server.xml中静态定义Context时,也必须设置此属性,除非docBase不在主机的appBase下,或者deployOnStartup和autoDeploy均为false 。如果不遵循此规则,则可能导致双重部署。