在web.xml中使用属性

时间:2010-06-01 10:35:19

标签: web-applications properties web.xml

我想控制web.xml中的设置,并针对不同的环境使用不同的设置。

是否可以在web.xml中使用类路径上的属性文件中的属性?像这样:

 <context-param>
  <param-name>myparam</param-name>
  <param-value>classpath:mypropertyfile.properties['myproperty']</param-value>
 </context-param>

祝你好运

P

3 个答案:

答案 0 :(得分:6)

没有。但是,您可以在运行时传递属性文件并从中读取。

<context-param>
    <param-name>propfile</param-name>
    <param-value>myprop.properties</param-value>
</context-param>

如果您有权访问servlet,那么在运行时加载属性是微不足道的。

Properties properties = new Properties();
GenericServlet theServlet = ...;
String propertyFileName = theServlet.getInitParameter("propfile");
properties.load(getClass().getClassLoader().getResourceAsStream(propertyFileName));
Object myProperty = properties.get("myProperty");

答案 1 :(得分:2)

AFAIK context-paramenv-entry都包含静态值。您不会从属性文件中获取运行时(动态)值。 它会像:

<context-param>     
  <param-name>myparam</param-name>     
  <param-value>myactualpropertyvalue</param-value>     
 </context-param>

对值的任何更改都需要重新部署Web应用程序。

在您的示例中,您检索的值将是字符串classpath:mypropertyfile.properties['myproperty']

如果您使用Glassfish,您可以从命令行http://javahowto.blogspot.com/2010/04/glassfish-set-web-env-entry.html

动态更新它

如果我理解你的要求是构建时间(即不同的战争对不同的环境)而不是在运行时间吗?

您可以将web.xml中的值替换为ant / maven构建过程的一部分。

答案 2 :(得分:1)

如果使用不同的环境,很可能在运行时不会从一个环境切换到另一个环境,因此不需要使用属性文件。

如果使用maven,您可以为您的环境定义不同的配置文件,并在每个配置文件中设置要更改的参数。

在你的pom.xml中

<profile>
    <id>env1</id>
    <properties>
        <my.param>myParamValue<my.param/>
    </properties>
</profile>

<profile>
    <id>env2</id>
    <properties>
        <my.param>myParamValue2<my.param/>
    </properties>
</profile>

在您的web.xml中

<context-param>
    <param-name>myparam</param-name>
    <param-value>${my.param}</param-value>
</context-param>

在maven war plugin

中配置部署描述符中的过滤
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
    </configuration>
</plugin>