1

我正在尝试找到一种方法,如何在我的 Java Servlet 中使用属性文件(扩展 http-servlet)。我已经尝试使用ClassLoader#getResourceAsStream()and 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
4

4 回答 4

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"));
于 2013-03-12T07:41:28.953 回答
1

检查所有名称。你的代码工作正常。

于 2013-03-12T08:01:46.317 回答
1

试试这个

编辑

p.load(getServletContext().getClassLoader().getResourceAsStream("properties/database.properties"));

顺便说一句,你需要文件夹move the database.properties才能/WEB-INF/classes工作

文件夹结构应该是

WEB-INF
  | classes
      |properties
       database.properties
于 2013-03-12T08:04:30.907 回答
0

我同意“dj aqeel”,但要获得 ResourceBundle,它必须在类目录中。

因此,我将文件放在“ /WEB-INF/classes/properties/database.properties ”中。显然,您必须将文件放在 src 目录中,编译器会自动移动到那里。

马科斯

于 2013-03-12T07:48:25.033 回答