加载资源在本地有效,但在服务器上无效
loading resource works locally but not on server
首先,我通过在 eclipse 和 tomcat 8.0.33 上提取 war 文件(使用 maven)来尝试我的代码 mac .
我还在 windows server 2008 上用相同的 java 版本 1.8 尝试了我的代码,当我将一些变量(用户名和密码)硬编码时它可以工作,但是当我编写了代码以从 reousrce 文件中读取它们,它只在我的 mac 上工作(eclipse 和 tomcat 都是独立的),但在服务器上不起作用
这是读取资源的代码
private static String getUsername() {
Properties prop = new Properties();
InputStream input = null;
try {
input = new FileInputStream(MyConfiguration.class.getClassLoader()
.getResource("configuration.properties").getFile());
// load a properties file
prop.load(input);
// get the property value and print it out
return prop.getProperty("username");
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
configuration.properties
的位置在 src/main/resources
和服务器上,我可以看到该文件位于正确的目录中。
我正在使用maven,我不知道你还需要什么其他信息来帮助我,但如果你说,我会给你
打开您的 war 和包含您的应用程序的 jar 文件。确保您尝试打开的资源在正在部署的 jar 中(在 war 中)。大多数时候这发生在我身上,是因为我没有告诉我的构建过程需要将这个文件复制到部署中。 Class 文件会自动进入,但资源文件并非总是如此。
你可以试试
input = Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.properties");
首先,我通过在 eclipse 和 tomcat 8.0.33 上提取 war 文件(使用 maven)来尝试我的代码 mac .
我还在 windows server 2008 上用相同的 java 版本 1.8 尝试了我的代码,当我将一些变量(用户名和密码)硬编码时它可以工作,但是当我编写了代码以从 reousrce 文件中读取它们,它只在我的 mac 上工作(eclipse 和 tomcat 都是独立的),但在服务器上不起作用
这是读取资源的代码
private static String getUsername() {
Properties prop = new Properties();
InputStream input = null;
try {
input = new FileInputStream(MyConfiguration.class.getClassLoader()
.getResource("configuration.properties").getFile());
// load a properties file
prop.load(input);
// get the property value and print it out
return prop.getProperty("username");
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
configuration.properties
的位置在 src/main/resources
和服务器上,我可以看到该文件位于正确的目录中。
我正在使用maven,我不知道你还需要什么其他信息来帮助我,但如果你说,我会给你
打开您的 war 和包含您的应用程序的 jar 文件。确保您尝试打开的资源在正在部署的 jar 中(在 war 中)。大多数时候这发生在我身上,是因为我没有告诉我的构建过程需要将这个文件复制到部署中。 Class 文件会自动进入,但资源文件并非总是如此。
你可以试试
input = Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.properties");