我正试图找到一种方法,如何在我的Java Servlet中使用属性文件(扩展http-servlet)。我已尝试使用ClassLoader#getResourceAsStream()
和ServletContext#getResourceAsStream()
。但无论我在做什么,一切都行不通,总有NullPointerException
。
database.properties
文件:
Driver=org.postgresql.Driver
Protokoll=jdbc:postgresql://
Speicherort=localhost/
Datenbank=Ticketshop
User=postgres
代码:
p = new Properties();
p.load(getServletContext().getResourceAsStream("/WEB-INF/properties/database.properties"));
protokoll = p.getProperty("Protokoll");
speicherort = p.getProperty("Speicherort");
user = p.getProperty("User");
driver = p.getProperty("Driver");
password = p.getProperty("Password");
database = p.getProperty("Datenbank");
文件树:
Java Resources
|-- src
|-- login
|-- Login.java
WebContent
|-- WEB-INF
|-- properties
|-- database.properties
答案 0 :(得分:2)
为什么不使用ResourceBundle
。它使用起来非常简单。 将属性文件放在源文件夹和
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class DatabaseConstantsAccessor
{
// don't include .properties extension, just specify the name without extension
private static final String BUNDLE_NAME = "database";
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
private ConstantsAccessor()
{
}
public static String getString(String key)
{
try
{
return RESOURCE_BUNDLE.getString(key);
}
catch (MissingResourceException e)
{
return '!' + key + '!';
}
}
}
要访问属性的位置,请使用以下代码:
String driverString=DatabaseConstantsAccessor.getString("Driver");
Integer intProp=Integer.valueOf(DatabaseConstantsAccessor.getString("SomeIntProperty"));
答案 1 :(得分:1)
检查所有名字。你的代码工作正常。
答案 2 :(得分:1)
试试这个
修改
p.load(getServletContext().getClassLoader().getResourceAsStream("properties/database.properties"));
顺便说一下,您需要move the database.properties
到/WEB-INF/classes
文件夹才能使用
文件夹结构应为
WEB-INF
| classes
|properties
database.properties
答案 3 :(得分:0)
我同意“dj aqeel”但要获得ResourceBundle,这必须在类目录中。
因此,我把文件放在“/WEB-INF/classes/properties/database.properties”中。显然,您必须将文件放在src目录中,编译器会自动移动到那里。
马科斯