参见英文答案 >
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?