题
设想:
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/ 目录中的配置文件中覆盖它。我在哪里/怎样才能做到这一点???
解决方案
根据文档 语境 元素:
上下文参数
您可以通过嵌套来配置将在Web应用程序中可见为Servlet上下文初始化参数的命名值
<Parameter>
此元素内部的元素。例如,您可以创建这样的初始化参数:<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>
但不需要修改部署描述符来自定义此值。
a 的有效属性
<Parameter>
元素如下:...
有关 override
的属性 <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
文件:Context 元素信息将被所有 webapp 加载。- 在里面
$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default
文件:Context 元素信息将由该主机的所有 Web 应用程序加载。- 在各个文件(带有“.xml”扩展名)中
$CATALINA_BASE/conf/[enginename]/[hostname]/
目录。文件的名称(减去 .xml 扩展名)将用作上下文路径。可以使用 # 定义多级上下文路径,例如foo#bar.xml
对于上下文路径/foo/bar
. 。默认 Web 应用程序可以使用名为 ROOT.xml 的文件来定义。- 仅当应用程序的上下文文件不存在时
$CATALINA_BASE/conf/[enginename]/[hostname]/
, ,在单独的文件中/META-INF/context.xml
在应用程序文件内。如果 Web 应用程序打包为 WAR 那么/META-INF/context.xml
将被复制到$CATALINA_BASE/conf/[enginename]/[hostname]/
并重命名以匹配应用程序的上下文路径。一旦该文件存在,如果新的 WAR 具有较新的版本,则该文件不会被替换/META-INF/context.xml
放置在主机的appBase 中。- 在 main 中的 Host 元素内
conf/server.xml
.除了
server.xml
, ,定义的文件 语境 元素只能定义一个 语境 元素。
其他提示
哎呀!我以为我之前问过这件事。有时在这个网站上搜索真的很难。
不隶属于 StackOverflow