9

设想:

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/ 目录中的配置文件中覆盖它。我在哪里/如何做到这一点???

4

2 回答 2

20

根据Context元素的文档:

上下文参数

<Parameter>您可以通过将元素嵌套在此元素中来配置将对 Web 应用程序可见的命名值作为 servlet 上下文初始化参数 。例如,您可以像这样创建一个初始化参数:

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

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

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

但不需要修改部署描述符来自定义此值。

元素的有效属性 <Parameter>如下:

...

关于overridea 的属性<Parameter>,文档说:

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

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


对于“where”部分,请阅读上下文容器的介绍:

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

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

  • 文件中$CATALINA_BASE/conf/context.xml:所有 webapp 都会加载 Context 元素信息。
  • $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default文件中: Context 元素信息将由该主机的所有 webapps 加载。
  • 在目录中的单个文件(扩展名为“.xml”)中$CATALINA_BASE/conf/[enginename]/[hostname]/。文件名(减去 .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此文件一旦存在,如果在主机的 appBase 中放置了一个带有更新的新 WAR,它将不会被替换。
  • 在 main 的 Host 元素内conf/server.xml

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

于 2009-10-26T17:36:25.240 回答
0

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

在哪里/如何为 Tomcat .war 文件设置配置资源

于 2009-10-26T17:40:44.313 回答