【问题标题】:Defining Tomcat servlet context parameters定义 Tomcat servlet 上下文参数
【发布时间】:2010-12-10 04:58:20
【问题描述】:

场景:

foo.war 文件包含初始参数 fooParam=1 的默认值。

这是在foo.war!WEB_INF/web.xml 中定义的,其中包含:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

    <context-param>
      <param-name>fooParam</param-name>
      <param-value>1</param-value>
      <description>
        my parameter "fooParam"
      </description>
    </context-param>

    ...

好的,现在我希望能够在 Tomcat {$CATALINA_HOME}/conf/ 目录中的配置文件中覆盖它。我在哪里/如何做到这一点???

【问题讨论】:

    标签: tomcat6


    【解决方案1】:

    根据Context元素的文档:

    上下文参数

    您可以配置命名值 将在网络上可见 应用程序作为 servlet 上下文 通过嵌套初始化参数 &lt;Parameter&gt; 里面的元素 元素。例如,您可以创建 像这样的初始化参数:

    <Context ...>
      ...
      <Parameter name="companyName" value="My Company, Incorporated"
             override="false"/>
      ...
    </Context>
    

    这相当于包含 网络中的以下元素 应用程序部署描述符 (/WEB-INF/web.xml):

    <context-param>
      <param-name>companyName</param-name>
      <param-value>My Company, Incorporated</param-value>
    </context-param>
    

    但不需要修改 要自定义的部署描述符 这个值。

    a 的有效属性 &lt;Parameter&gt;元素如下:

    ...

    关于&lt;Parameter&gt;override 属性,文档说:

    如果您不希望在 Web 应用程序部署描述符中找到的相同参数名称的 &lt;context-param&gt; 覆盖此处指定的值,请将其设置为 false。默认情况下,允许覆盖。

    将其设置为 false 应该可以解决问题。这是“如何”部分。


    关于“where”部分,阅读参考The Context Container的介绍:

    对于 Tomcat 6,与 Tomcat 4.x 不同,不建议将 &lt;Context&gt; 元素直接放在 server.xml 文件中。 这是因为它使修改 Context 配置更具侵入性,因为conf/server.xml 主文件无法在不重新启动 Tomcat 的情况下重新加载。

    上下文元素可以显式定义:

    • $CATALINA_BASE/conf/context.xml 文件中:Context 元素信息将被所有 web 应用加载。
    • $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default 文件中:上下文元素信息将由该主机的所有webapps 加载。
    • $CATALINA_BASE/conf/[enginename]/[hostname]/ 目录中的单个文件(扩展名为“.xml”)中。文件名(减去 .xml 扩展名)将用作上下文路径。可以使用 # 定义多级上下文路径,例如foo#bar.xml 用于 /foo/bar 的上下文路径。可以使用名为 ROOT.xml 的文件来定义默认 Web 应用程序。
    • 仅当在$CATALINA_BASE/conf/[enginename]/[hostname]/ 中不存在应用程序的上下文文件时,在应用程序文件内/META-INF/context.xml 的单个文件中。如果 Web 应用程序被打包为 WAR,那么 /META-INF/context.xml 将被复制到 $CATALINA_BASE/conf/[enginename]/[hostname]/ 并重命名以匹配应用程序的上下文路径。此文件一旦存在,如果将具有较新 /META-INF/context.xml 的新 WAR 放置在主机的 appBase 中,它将不会被替换。
    • 在主 conf/server.xml 的 Host 元素内。

    除了server.xml,定义Context 元素的文件只能定义一个Context 元素。

    【讨论】:

      【解决方案2】:

      啊!我以为我以前问过这个。有时候在这个网站上搜索真的很难。

      where/how to setup configuration resources for Tomcat .war files

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-28
        • 1970-01-01
        • 2010-09-08
        • 2011-02-05
        • 2021-07-19
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多