I have a servlet deployed as a war in JBoss 4.0.2. I have a properties file for the deployed application. Where should I put this file? Under the conf directory in the jboss server\default\conf folder? How do I load that properties file in a portable manner?
-
The project that required this got canceled so I never followed up. – randomperson25 Dec 29 '10 at 15:09
4 Answers
To load that properties file in a portable manner, the best way would be to put it on the classpath of the web application (either in a JAR under WEB-INF/lib/
or under WEB-INF/classes/
or on the app server classpath if you want to be able to edit that file without repackaging your web application) and to use Class#getResourceAsStream(String)
.
The following code gets an InputStream
for a property file which resides in the same package as the servlet in which the code is executed:
InputStream inStream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("myfile.properties");
Then, load(InputStream)
it into a Properties
object (skipping Exception handling):
Properties props = new Properties();
props.load(inStream);

- 562,542
- 136
- 1,062
- 1,124
Just get hold of the servletContext and then
InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/log4j.properties");
Properties props = new Properties();
props.load(stream);
This will always work, regardless of whether you deploy a war or exploded war.

- 815
- 2
- 7
- 12
If the properties file can be deployed along with the application make it part of your source tree. This will result in the properties file to be in the WEB-INF/classes folder.
This can then be read using
Properties properties = loadProperties("PropertyFileName.properties", this.getClass());
...
public static Properties loadProperties(String resourceName, Class cl) {
Properties properties = new Properties();
ClassLoader loader = cl.getClassLoader();
try {
InputStream in = loader.getResourceAsStream(resourceName);
if (in != null) {
properties.load(in);
}
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}

- 3,157
- 1
- 20
- 17
The best place to put it is under the web-apps' own doc-root, like "./WEB-INF/myapp.properties", i.e. relative to where the servlet container unpacked your .war
or .ear
file. You can provide the properties file directly in the .war
.
The ServletContext
has a method getRealPath(String path)
that returns the actual path in the filesystem. Using the real path you can load it in a Properties
collection.
Update The code in your comment tries to lookup real path for "/", you should ask for the relative path to your properties file, as in:
String propertiesFilePath = getServletContext().getRealPath("WEB-INF/application.properties");
Properties props = properties.load(new FileInputStream(propertiesFilePath));

- 23,135
- 6
- 55
- 69
-
So I tried the following: String propertiesFilePath = getServletContext().getRealPath("/") + File.separator + "WEB-INF" + File.separator + "application.properties"; properties.load(new FileInputStream(propertiesFilePath)); I get a FileNotFoundException. I don't see what I did wrong. – randomperson25 Jan 06 '10 at 20:13