powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / неверный путь к файлу из tomcat
3 сообщений из 3, страница 1 из 1
неверный путь к файлу из tomcat
    #37782342
t3rmit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начал изучать Servlets/JSP. Написал несколько небольших веб-приложений/примеров в блокноте, скомпилировал командной строкой, развернул в tomcat 7.0. Всё нормально.
Решил пойти дальше - перейти в NetBeans и написать приложение для работы с БД с использованием MVC, DAO...
DAO при работе с консолью работало нормально. Настройки вынес в отдельный файл-db.properties.
Структура папок:
Код: sql
1.
2.
3.
4.
5.
6.
|-Project
    |-properties
        |-db.properties
    |-src
    |-build
    |-...


db.properties
Код: sql
1.
2.
3.
4.
DRIVER=com.mysql.jdbc.Driver
DB_URL=jdbc:mysql://localhost:3306/faculty
LOGIN=root
PASS=root


Подключаюсь к БД через класс ConnectorDao
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public class ConnectorDao {
    public static String PROPERTY_FILE_PATH = "./properties/db.properties";
        
    public static Connection getConnection() {
        Connection connection = null;
        try {
            FileInputStream is = null;
            String dbUrl = "";
            try{
                is = new FileInputStream(PROPERTY_FILE_PATH);
                Properties props = new Properties();
                props.load(is);
                dbUrl = props.getProperty("DB_URL");    
            } finally {
                is.close();
            }    
            if (connection == null || connection.isClosed()) {
                connection = DriverManager.getConnection(dbUrl, "root", "root");
            } 
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (SQLException sqlEx) {
            sqlEx.printStackTrace();
        }
        return connection;
    }    
}


Так вот, раньше при создании FileInputStream(PROPERTY_FILE_PATH) всё работало нормально и формировало правильный путь.
Код: sql
1.
C:\Users\admin\Desktop\Project\properties\db.properties


А после того, как я начал делать веб-приложение, при вызове из сервлета путь стал следующим:
Код: sql
1.
C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.22\bin\.\properties\db.properties


Собственно вопросы:
1) как это всё работает, если в моя папка с проектом находится на рабочем столе, а в папке Tomcat webapps при деплое никакого проекта не появляется. Как тогда появляются веб-страницы в браузере?
2) как избавиться от моей проблемы с путями, чтобы достучаться к файлу properties?
Спасибо.
...
Рейтинг: 0 / 0
неверный путь к файлу из tomcat
    #37782377
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда File, File*Stream создаются через относительный путь, то в качестве корня используете "текущая директория" - "user.dir
User's current working directory" смотрите JavaDoc System.getProperties() и File

JEE приложения деплоятся куда угодно и сервера запускаются как попало. Соответственно использование user.dir стоит избегать.

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

Соответсвенно недостаток этого подхода в том что свойства живут внутри war архива и менять их во время каждого деплоя геморно. Это относится и к db.properties. Вы сущетсвенно упростите процесс деплоймента если будете использовать JNDI DataSource.
Таким образом соединение с базой прописывается один раз и навсегда внутри сервера приложений. И само приложение менять не нужно только для того чтобы поменять настройки к базе.

Здесь возникет другая проблема в том что вы можете только использовать пул, который предлагает сервер. И если вдруг он вам не подходит, например, из-за низкой производительности. Тогда нужно придумывать альтернативное решение.

Как вариант - дефолтные настройки всё так же живут в коде и читаются через Class.getResourceAsStream(). При первом старте сервер их копирует в user.home или java.io.tmpdir. Там админ их может менять. А сервер их будет перезаписывать поверх дефолтных. Соответственно Админу не нужно менять сам сервер.

И последнее - структура вашего проекта в некой IDE абсолютно не важна. Важно то как ваше приложение собирается в JEE модуль (war) и потом деплоится на сервер. IDE скрывает от вас этот процесс и это приводит к недопониманию. Соответсвенно для начала соберите war и задеплойте его в Tomcat самостоятельно. А когда разберетесь с процессом, то используейте IDE для тестового деплоймента.
...
Рейтинг: 0 / 0
неверный путь к файлу из tomcat
    #37782438
t3rmit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за развернутый ответ. Буду разбираться!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / неверный путь к файлу из tomcat
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]