Tomcat 7 上下文参数覆盖

2023-12-30

我试图通过在以下位置创建 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 in <tomcat-home>/context.xml然后就可以了。

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


这是因为不存在该名称的应用程序上下文context。换句话说,没有具有该名称的网络应用程序context部署到webapps目录。

形成 Tomcat 7 相关的官方文档定义上下文 http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Defining_a_context:

可以显式定义各个 Context 元素:

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

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

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

因此,为了使其工作,请将您的自定义文件命名为上下文.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>

P.S.

你也可以不用path属性,所以不要包含它。
来自Apache Tomcat 7 文档 http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Common_Attributes:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat 7 上下文参数覆盖 的相关文章

随机推荐