Servlet init和Class

时间:2013-07-17 13:38:39

标签: java servlets properties

我实际上有一个带有servlet的程序:

@WebServlet("/Controler")
public class Controler extends HttpServlet {

}

我需要在我的程序中使用属性文件:file.properties。要加载它,我有一个类:

public class PropLoader {

    private final static String m_propertyFileName = "file.properties";

    public static String getProperty(String a_key){

        String l_value = "";

        Properties l_properties = new Properties();
        FileInputStream l_input;
        try {

            l_input = new FileInputStream(m_propertyFileName); // File not found exception
            l_properties.load(l_input);

            l_value = l_properties.getProperty(a_key);

            l_input.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return l_value;

    }

}

我的属性文件位于WebContent文件夹中,我可以使用以下命令访问它:

String path = getServletContext().getRealPath("/file.properties");

但是我不能在另一个类中调用这些方法而不是servlet ...

如何在PropLoader类中访问我的属性文件?

2 个答案:

答案 0 :(得分:2)

如果要从webapp结构中读取文件,则应使用ServletContext.getResourceAsStream()。当然,由于您从webapp加载它,您需要对表示webapp的对象的引用:ServletContext。您可以通过覆盖servlet中的init(),调用getServletConfig().getServletContext()并将servlet上下文传递给加载文件的方法来获得此类引用:

@WebServlet("/Controler")
public class Controler extends HttpServlet {
    private Properties properties;

    @Override
    public void init() {
        properties = PropLoader.load(getServletConfig().getServletContext());
    }
}

public class PropLoader {

    private final static String FILE_PATH = "/file.properties";

    public static Properties load(ServletContext context) {
        Properties properties = new Properties();
        properties.load(context.getResourceAsStream(FILE_PATH));
        return properties;
    }
}    

请注意,必须处理一些例外情况。

另一种解决方案是将文件放在WEB-INF/classes下的已部署的webapp中,并使用ClassLoader加载文件:getClass().getResourceAsStream("/file.properties")。这样,您就不需要引用ServletContext

答案 1 :(得分:1)

我建议使用getResourceAsStream方法(下面的例子)。它需要属性文件位于WAR类路径。

InputStream in = YourServlet.class.getClassLoader().getResourceAsStream(path_and_name);

此致 栾