Как получить доступ к файлу с помощью Java в веб-приложении (сервер Glassfish) - PullRequest
0 голосов
/ 28 августа 2011

Я пытаюсь установить соединение с базой данных из класса ConnectionProvider. Я звоню ConnectionProvider.getConnection() внутри Servlet, которые возвращают Connection ссылку. Но я получаю исключение во время выполнения этого класса:

java.io.FileNotFoundException: db.properties (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:106)
    at java.io.FileInputStream.<init>(FileInputStream.java:66)

код ConnectionProvider:

    public class ConnectionProvider  {

static Properties prop;

static {
    try{
          prop= new Properties();
          prop.load(new FileInputStream("db.properties"));
       }catch(Exception e){  
     e.printStackTrace();
    }
}

public static Connection getConnection()  {

Connection con=null;
try{

Class.forName(prop.getProperty("driver"));
con=DriverManager.getConnection(prop.getProperty("url"),prop.getProperty("user"),prop.getProperty("pass"));
}catch(Exception e){
   e.printStackTrace(); 
}

return con;


}

}

Я не могу использовать ServletContext.getResourceAsStream (), потому что код не вызывается из сервлета. Я пытался поместить файл свойств в каждую папку внутри общей папки (корень) веб-приложения, но это не помогает. Я также не хочу жестко кодировать код подключения внутри сервлета и хочу, чтобы какой-нибудь вспомогательный класс выполнил для меня код подключения.

1 Ответ

3 голосов
/ 28 августа 2011

Просто поместите его в путь к классам и загрузите его из пути к классам.В приведенном ниже примере предполагается, что вы поместили db.properties в корень пути к классам (например, в корень структуры вашего пакета; в Eclipse, например, это было бы прямо в папке src):

Properties properties = new Properties();
InputStream input = null;

try {
    input = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
    properties.load(input);
} finally {
    if (input != null) try { input.close(); } catch (IOException ignore) {}
}

См. Также:


Не связано с проблемой, вашим кодомстиль игнорирования исключения и печати его трассы, а затем продолжения потока кода - очень плохая практика.Ваш код вернет соединение null, а код вызова будет прерван с NullPointerException.Вы должны действительно обработать исключение разумным способом.В этом конкретном случае просто выбросьте его или перебросьте в другом исключении.

Загрузка класса драйвера каждый раз в getConnection() также не требуется.Одного времени достаточно для жизни приложения.Вы можете сделать это, например, в блоке static.Не забудьте сбросить любое пойманное исключение как ExceptionInInitializerError.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...