I have a plain java class in a web application and want to read a configuration file under WEB-INF folder. I know the way to access the file if its in the classpath (WEB-INF/classes folder). Since WEB-INF/classes folder is meant for .class files, I want to keep my configuration file under WEB-INF folder only.
Can anyone tell me how I can access it from my java class?
解决方案
ServletContext.getResourceAsStream() will load a file from a given path relative to the root of the WAR file. Something like:
ServletContext ctx;
InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties");
The major issue here is that you need access to the servlet context to be able to do this. You have that in a servlet or a filter, but not in a non-web component further back in the application. You have a few options:
Make the servlet context available from the web layer to the service layer, via an application-scoped variable, or injection, or some other way
Put the resource-loading code in the web layer, and expose that to the service layer
Load the configuration in the web layer, and pass it on to the service layer