How to include values from .properties file into web.xml?

I need to include some values from a file.properties into the WEB-INF/web.xml something like this:

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

I'm currently working with this:

  • JBoss
  • JEE5

Solution 1:

You can add this class, that add all properties from your file to JVM. And add this class like context-listener to 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));
         }
      }
   }
}  

in web.xml

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

now you can get all properties in you project using

System.getProperty(...)

or in web.xml

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

Solution 2:

A word of caution regarding the accepted solution above.

I was experimenting with this on jboss 5 today: the contextInitialized() method doesn't get invoked until after web.xml is loaded so the change to System properties doesn't take effect in time. Strangely this means that if you re-deploy the webapp (without restarting jboss) the property will survive from being set the last time it was deployed, so it may appear to work.

The solution that we're going to use instead is to pass the parameters to jboss via the java command line e.g. -Dparameter1=value1 -Dparameter2=value2.