在Servlet / JSP中加载属性文件

时间:2012-09-20 06:19:41

标签: java jsp servlets properties

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

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

5 个答案:

答案 0 :(得分:21)

/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,那么你真的需要将属性文件移动到类路径中。

另见:

答案 1 :(得分:6)

尝试将sample.properties放在src文件夹下,然后

Properties prop = new Properties();
prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("myprop.properties"));

答案 2 :(得分:2)

将您的媒体资源文件移至WEB-INF/classes下。然后加载如下:

prop.load(getClass().getResourceAsStream("sample.properties"));

您也可以将其放在classes下的子目录中。在这种情况下,请相应地将呼叫更改为getResourceAsStream()

为了在多班级系统中更安全,您可以使用Thread.getContextClassLoader().getResourceAsStream()代替。

要使属性文件到达war文件的classes文件夹,您必须将其放在项目中的resources文件夹下(如果您使用的是maven)或者只在{{1}下面}文件夹,如果你不使用类似maven的目录结构。

答案 3 :(得分:1)

试试这个,

 InputStream inStream = Thread.currentThread().getContextClassLoader()
                     .getResourceAsStream("/WEB-INF/properties/sample.properties");

然后,将其(InputStream)加载到Properties对象中:

Properties props = new Properties();
props.load(inStream);

答案 4 :(得分:0)

它可能不起作用如果您尝试从jsp / servlet加载属性。编写一个实用程序类来读取属性和包以及jar文件。将属性文件复制到与实用程序相同的包中。

 Class Utility{
    Properties properties=null;
    public void load() throws IOException{
        properties.load(getClass().getResourceAsStream("sample.properties"));
    }
    public Object get(String key) throws IOException{
        if (properties==null){
            load();
        }
        return properties.get(key); 
    }
  }

现在使用servlet中的这个实用程序类来读取属性值。可能是您可以将类定义为单例以进行更好的练习

干杯 Satheesh