我试图在战争中访问我的属性文件。代码正在运行,但是当我将代码导入战争并使用Fiddler使用POST(使用已接受的输入)时,它无法找到config.properties。 (空指针异常)
输入和网络服务正常运行。试图找出一种在使用战争时编辑我的属性的方法。
一些事实:
我制作了RetreivePropertiesClass。这使用:properties.load(this.getClass().getResourceAsStream("/WEB-INF/config.properties"));
我的属性文件路径:/com.webapp/WebContent/WEB-INF/config.properties
我试图在以下位置使用属性数据:
String url = RetreiveProperties.getUrl();
String driver = RetreiveProperties.getDriver();
String username = RetreiveProperties.getUsername();
String password = RetreiveProperties.getPassword();
// line below causes the NullPointerException
Class.forName(driver);
使用Getter:
public static String getDriver() {
return driver = properties.getProperty("jdbc.driver");
}
部署战争时,属性文件位于:
web应用\ com.webapp1 \ WEB-INF \ config.properties
jdbc.url = jdbc:postgresql://127.0.0.1:2222 / gisdb
jdbc.driver = org.postgresql.Driver
jdbc.username = postgres
jdbc.password = admin
我已经尝试制定了here和here给出的示例。继续给出NullPointerException,因为没有加载属性文件。 任何人都可以把我推向正确的方向吗?
干杯!
答案 0 :(得分:1)
If you are going to load the properties file from the classpath, it must be in the WEB-INF/classes
directory inside of your war. (Or inside a jar inside of WEB-INF/lib
). The WEB-INF
directory itself is not on the classpath.
If you make sure the file ends up as WEB-INF/classes/config.properties
your above code should work if you change the getResourceAsStream
call to getResourceAsStream("/config.properties")
答案 1 :(得分:1)
如果方法是静态方法,则getClass()方法将失败,并提示“无法从类型Object中对非静态方法getClass()进行静态引用”。
相反,你应该使用 CurrentClass.class.getClassLoader()。getResourceAsStream。
来源:here