定义Tomcat servlet上下文参数

时间:2009-10-26 17:10:42

标签: tomcat6

情景:

foo.war文件包含init参数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 /目录中的配置文件中覆盖它。我在哪里/怎么做?

2 个答案:

答案 0 :(得分:17)

根据Context元素的文档:

  

上下文参数

     

您可以配置那些命名值   将在网上显示   应用程序作为servlet上下文   嵌套初始化参数   这里有<Parameter>个元素   元件。例如,您可以创建   像这样的初始化参数:

<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的有效属性   <Parameter>元素如下:

     

...

关于override的{​​{1}}属性,文档说:

  

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

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


对于“where”部分,请参阅The Context Container

的介绍
  

<强>对于Tomcat 6,不同于Tomcat的4.x的,所以不推荐将<context-param>直接元素在<Context>文件。这是因为它使得对矫正语境配置更具侵入性,因为如果不重新启动Tomcat,则无法重新加载主server.xml文件。

     可以明确定义

上下文元素:

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

conf/server.xml外,定义上下文元素的文件只能定义一个上下文元素。

答案 1 :(得分:0)

哎呀!我以为我之前问过这件事。有时在这个网站上搜索真的很难。

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