gpt4 book ai didi

java - Servlet 初始化和类

转载 作者:行者123 更新时间:2023-11-29 05:40:43 26 4
gpt4 key购买 nike

我实际上有一个带有 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 类中的属性文件?

最佳答案

如果你想从 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;
}
}

请注意,必须处理一些异常。

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

关于java - Servlet 初始化和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17701331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com