情景:
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 /目录中的配置文件中覆盖它。我在哪里/怎么做?
答案 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