【问题标题】:How to include values from .properties file into web.xml?如何将 .properties 文件中的值包含到 web.xml 中?
【发布时间】:2012-08-19 09:42:29
【问题描述】:

我需要将file.properties 中的一些值包含到WEB-INF/web.xml 中,如下所示:

<param-name>uploadDirectory</param-name>
<param-value>myFile.properties['keyForTheValue']</param-value>

我目前正在处理这个:

  • JBoss
  • JEE5

【问题讨论】:

标签: jakarta-ee jboss web.xml java-ee-5


【解决方案1】:

关于上面接受的解决方案的注意事项。

我今天在 jboss 5 上对此进行了试验:contextInitialized() 方法直到 web.xml 加载后才会被调用,因此对系统属性的更改不会及时生效。奇怪的是,这意味着如果您重新部署 webapp(不重新启动 jboss),该属性将在上次部署时设置,因此它可能会起作用。

我们将使用的解决方案是通过 java 命令行将参数传递给 jboss,例如-Dparameter1=value1 -Dparameter2=value2.

【讨论】:

  • 更好的解决方案(虽然不适用于 jboss 7)是使用 properties.service.xml。您可以在那里即时映射属性。
  • 这是一个好主意(这是我们的系统管理员更喜欢保留系统属性的地方),但是您有这个工作吗?我尝试在server/default/deployserver/all/deploy 下更新properties.services.xml,无论哪种情况,它都不会在web.xml 中生效
【解决方案2】:
【解决方案3】:

您可以添加此类,将文件中的所有属性添加到 JVM。并将这个类如 context-listener 添加到web.xml

public class InitVariables implements ServletContextListener
{

   @Override
   public void contextDestroyed(final ServletContextEvent event)
   {
   }

   @Override
   public void contextInitialized(final ServletContextEvent event)
   {
      final String props = "/file.properties";
      final Properties propsFromFile = new Properties();
      try
      {
         propsFromFile.load(getClass().getResourceAsStream(props));
      }
      catch (final IOException e)
      {
          // can't get resource
      }
      for (String prop : propsFromFile.stringPropertyNames())
      {
         if (System.getProperty(prop) == null)
         {
             System.setProperty(prop, propsFromFile.getProperty(prop));
         }
      }
   }
}  

在 web.xml 中

   <listener>       
      <listener-class>
         com.company.InitVariables
      </listener-class>
   </listener>  

现在您可以使用

获取项目中的所有属性
System.getProperty(...)

或在 web.xml 中

<param-name>param-name</param-name>
<param-value>${param-name}</param-value>

【讨论】:

  • 谢谢,这是我正在寻找的解决方案
  • 我无法让 Jetty 使用相对路径和 getResourceAsStream 找到资源,但绝对路径和 FileInputStream 似乎工作... +1 让我朝着正确的方向前进!
  • 没有这个实用程序吗?
  • 在 java 中,我们可以在应用程序的任何地方获取属性值,但在 xml 中,我们无法在 web.xml 中使用变量。
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 2021-03-15
  • 2018-04-03
  • 2012-01-12
  • 2015-03-31
  • 1970-01-01
相关资源
最近更新 更多