参见英文答案 >
Where to place and how to read configuration resource files in servlet based application?6个
我已经从我的Java项目创建了一个jar,并希望在JSP Servlet项目中使用相同的jar.我正在尝试加载一个属性文件,让我说我的JSP Servlet项目中的sample.properties保存在WEB / properties / sample.properties中,应该由jar中的类读取.我在类中使用以下代码wriiten jar来访问它.
我已经从我的Java项目创建了一个jar,并希望在JSP Servlet项目中使用相同的jar.我正在尝试加载一个属性文件,让我说我的JSP Servlet项目中的sample.properties保存在WEB / properties / sample.properties中,应该由jar中的类读取.我在类中使用以下代码wriiten jar来访问它.
- Properties prop=new Properties();
- prop.load(/WEB-INF/properties/sample.properties);
但每次我都得到fileNotFound异常.
请建议我的解决方案.
这是结构
- WEB-INF
- |
- lib
- |
- myproject.jar
- |
- myclass (This class needs to read sample.properties)
- |
- properties
- |sample.properties
解决方法
/ WEB-INF文件夹不是类路径的一部分.所以这里任何回答都没有意思,建议
ClassLoader#getResourceAsStream()
永远不会奏效.它只有在属性文件放在/ WEB-INF / classes中才有效,这确实是类路径的一部分(在像Eclipse这样的IDE中,只需将它放在Java源文件夹的根目录就足够了).
如果属性文件确实存在于您希望保留的位置,那么您应该在ServletContext#getResourceAsStream()
之前将其作为Web内容资源.
假设你在HttpServlet中,这应该做:
- properties.load(getServletContext().getResourceAsStream("/WEB-INF/properties/sample.properties"));
(getServletContext()继承自servlet超类,你不需要自己实现它;所以代码是原样的)
但是如果该类本身根本不是HttpServlet,那么你真的需要将属性文件移动到类路径中.
也可以看看:
> Where to place and how to read configuration resource files in servlet based application?