一尘不染

在Servlet / JSP中加载属性文件

jsp

jar从中创建了一个,Java project并希望在中使用相同的jar JSP Servlet Project。我正在尝试从我JSP Servlet Project保存的文件中加载一个属性文件,例如sample.properties
WEB/properties/sample.properties该文件应由.class中的类读取。我正在jarjar 类中使用以下代码来访问它。

Properties prop=new Properties();
prop.load(/WEB-INF/properties/sample.properties);

但是每当我得到的时候fileNotFound exception
请给我建议解决方案。

这是结构

WEB-INF
      |
       lib
          |
           myproject.jar
                       |
                        myclass (This class needs to read sample.properties)
      |
       properties
                 |sample.properties

阅读 215

收藏
2020-06-08

共1个答案

一尘不染

/WEB-INF文件夹 属于类路径。因此,此处任何 未经
深思熟虑的答案都ClassLoader#getResourceAsStream()
永远 无效。仅当属性文件/WEB- INF/classes确实位于类路径的一部分中时才起作用(在像Eclipse这样的IDE中,只需将其放在Java源文件夹根目录中就足够了)。

如果属性文件确实位于您要保存的位置,那么您应该将其作为Web内容资源获取ServletContext#getResourceAsStream()

假设您在内HttpServlet,则应该这样做:

properties.load(getServletContext().getResourceAsStream("/WEB-INF/properties/sample.properties"));

(它getServletContext()是从servlet超类继承的,您不需要自己实现它;因此代码是原样的)

但是,如果类本身根本不是一个类HttpServlet,那么您真的需要将属性文件移到类路径中。

2020-06-08