【问题标题】:Tomcat 7 context parameter overrideTomcat 7 上下文参数覆盖
【发布时间】:2013-01-19 17:37:53
【问题描述】:

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

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

如果我将&lt;Parameter name="port" value="100" override="1"/&gt; 直接放在context.xml 中的&lt;tomcat-home&gt;/context.xml 中,那么它可以工作。

谁能解释我做错了什么?

【问题讨论】:

    标签: java tomcat servlets configuration


    【解决方案1】:

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

    形成与Defining a context相关的Tomcat 7官方文档:

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

    • 在应用程序文件内 /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 元素中。

    因此,要使其正常工作,请不要将自定义文件命名为 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>
    

    附:

    而且你可以得到没有 path 属性,所以不要包含它。
    来自Apache Tomcat 7 documentation

    该属性只能在静态定义上下文时使用 server.xml。在所有其他情况下,路径将从 用于 .xml 上下文文件或 docBase 的文件名。

    即使在 server.xml 中静态定义一个 Context,这个属性 除非 docBase 不位于 主机的 appBase 或 deployOnStartup 和 autoDeploy 均为 false。如果 不遵守这条规则,很可能导致双重部署。

    【讨论】:

      猜你喜欢
      • 2013-02-28
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多