gpt4 book ai didi

java - 通过 Servlet 设置属性

转载 作者:行者123 更新时间:2023-11-29 07:49:39 24 4
gpt4 key购买 nike

我想通过 servlet 从 configures.properties 设置数据。 configures.properties 位于 WEB-INF/classes 中。这就是我获取数据的方式:

public static String getDbPassword() {
Properties prop = new Properties();
try {
// load a properties file
InputStream in = Configures.class.getResourceAsStream(INPUT_FILE);
prop.load(in);

// get the property value
return prop.getProperty("dbPassword");

} catch (IOException ex) {
ex.printStackTrace();
}
return null;
}

但是怎么设置呢?我是这样做的:

public static void setDbPassword(String str) {
Properties prop = new Properties();
try {
//load a properties file
InputStream in = Configures.class.getResourceAsStream(INPUT_FILE);
prop.load(in);
prop.setProperty("dbPassword", str);
prop.store(new FileOutputStream(INPUT_FILE), null);

} catch (IOException ex) {
ex.printStackTrace();
}
}

但在此之后我捕获了 java.io.FileNotFoundException。我认为它发生在 prop.store(new FileOutputStream(INPUT_FILE), null); 之后。我应该如何修改OutputStream

更新:这是 INPUT_FILE 的样子:

private static final String INPUT_FILE = "/config.properties";

最佳答案

您的 INPUT_FILE 是一个资源路径,getResourceAsStream 将相对于类路径进行解析,但您随后试图将相同的字符串传递给 FileOutputStream 构造函数,它将尝试将其视为相对于文件系统根目录的绝对路径。这是两个不同的位置。

您可以使用 ServletContext.getRealPath("WEB-INF/classes"+ INPUT_FILE) 获取 FileOutputStream 所需的路径。

但这里更高层次的问题是,您不应该假设您的 Web 应用程序将对其 WEB-INF 具有写入权限,甚至该目录根本存在于磁盘上(例如,如果该应用程序直接从 WAR 运行,而不是从磁盘上解压的目录运行)。如果你想存储可以更改的配置数据,那么它应该放在一个已知位置的文件中 网络应用程序之外(这个文件的位置可以是一个初始化参数)你知道你将拥有读写权限。当您部署新版本的应用程序时,这也会阻止您的更改被覆盖。

关于java - 通过 Servlet 设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22296729/

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