Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / неверный путь к файлу из tomcat / 3 сообщений из 3, страница 1 из 1
04.05.2012, 16:04:07
    #37782342
t3rmit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
неверный путь к файлу из tomcat
Начал изучать 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
04.05.2012, 16:18:34
    #37782377
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
неверный путь к файлу из tomcat
Когда 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
04.05.2012, 16:48:44
    #37782438
t3rmit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
неверный путь к файлу из tomcat
Спасибо за развернутый ответ. Буду разбираться!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / неверный путь к файлу из tomcat / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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