Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Проект на JSP+Tomcat где хранить файл настроек?


Автор: Иван Человеков 17.1.2007, 17:48
Ребята пишу проект на JSP+Tomcat, подскажите куда мне положить файл «ini.properties», чтобы там указывать имя базы данных, строки подключения к СУБД, и другие настройки. 
Пользуюсь средой разработки IDEA 6, получаю текущий директорий вот так в сервлете:

Код

private final String curDir =//System.getProperty("user.dir")+"/";//Определяем текущий каталог

  public void getIni(){
      Properties settings =new Properties();
      try {
            settings.load(new FileInputStream(curDir+"ini.properties"));
            System.out.println("property1 = " + settings.getProperty("property1"));
      }catch (FileNotFoundException ex) {
            ex.printStackTrace();
      } catch (IOException ex) {
            ex.printStackTrace();
      }

Ложу файл в «resources». Получаю ошибку:
Код

java.io.FileNotFoundException: D:\Java_Tools\apache-tomcat-5.5.17\bin\ini.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)
    at by.Kononenko_Egor.zpl.servlet.IniZpl.getIni(IniZpl.java:17)


Где вы храните файл конфигурации в подобных проектах, и как ищете к нему путь? Спасибо.



Автор: YuG 17.1.2007, 18:00
Например, так (например, файл лежит в корне папки с *.class файлами):

Код

            .........
            ClassLoader loader = this.getClass().getClassLoader();
            InputStream stream = loader.getResource("ini.properties").openStream();
            .........
            Properties properties = new Properties();
            properties.load(stream);
            .........



Автор: tux 17.1.2007, 18:03
Храни внутри приложения. http://forum.vingrad.ru/topic-126384/index.html

Автор: Иван Человеков 18.1.2007, 16:37
Цитата(tux @ 17.1.2007,  18:03)
 Путь к тому каталогу, где лежит приложение, можно получить так:
Код

private static String getContextPath(ServletContext ctx) {
     String path = null;
     try {
        String p = ctx.getResource("/").getPath();
        path = p.substring(0, p.lastIndexOf("/"));
        path = path.substring(path.lastIndexOf("/") + 1);
     } catch (MalformedURLException e) {
         e.printStackTrace();
         return "";
     }
     return path;
}

tux, можешь прокомментировать свой код?

Меня очень интересует класс ServletContext. Если ссылки, можно на русском языке smile

Пытаюсь создать его так:
Код

ServletContext sc = getServletContext();


Cannot resolve method ‘getServletContext();’

В документации к JDKTM 5.0 Documentation есть только слабое упоминание, как я понимаю надо документация к J2EE? Где её можно взять? Что вообще надо, для того чтобы писать программы на J2EE? Я думал Tomcat-а хватит. Спасибо.

Автор: tux 18.1.2007, 16:44
Цитата(Иван Человеков @  18.1.2007,  16:37 Найти цитируемый пост)
Меня очень интересует класс ServletContext

ServletContext получить можно так:
Код

ServletContext sc = request.getSession().getServletContext();

Здесь request - это объект класса HttpServletRequest. Вот ссылка на javadoc - http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletContext.html.

Цитата(Иван Человеков @  18.1.2007,  16:37 Найти цитируемый пост)
Что вообще надо, для того чтобы писать программы на J2EE? Я думал Tomcat-а хватит.

Если ты не собираешься использовать EJB, то хватит за глаза. Вся документация по J2EE здесь - http://java.sun.com/j2ee/1.4/docs/.

Автор: 3x3 18.1.2007, 16:44
Цитата(Иван Человеков @ 18.1.2007,  16:37)
Где её можно взять?

Вообще, тут: http://java.sun.com/products/servlet/2.5/docs/servlet-2_5-mr2/index.html


Цитата(Иван Человеков)
Я думал Tomcat-а хватит. 


Должно хватить. Вот тут не смотрел?
http://localhost:8080/tomcat-docs/servletapi/index.html

Автор: Иван Человеков 20.1.2007, 06:29
tux,  спасибо, получилось! Однако я получил от процедуры не т что ожидал smile Она по урлу определяет папку Web-проекта. Значит мне ещё надо опрелелить где находится Tomcat + добавить путь /ewbapps/+то что выдаёт процедура - имя проекта.  По этому пути я буду писать *.properties.
Как это сделать? Спасибо.

3x3, Tomcat девственно чист по отношению к документации   smile 

Автор: tux 20.1.2007, 11:09
Иван Человеков, я дико извиняюсь. Я тебе совсем не то насоветовал. Метод этот - попытка вернуть контекст приложения. И та неудачная. Вот такой код в Томкате работает, в других веб-контейнерах тоже должен. Возвращает путь до корня приложения (тот путь, куда веб-контейнер приложение развернул).
Код

private static String getApplicationPath(ServletContext ctx) {
    String p = ctx.getRealPath("/");
    return p;
}

Хранение настроек в ресурсах (вместе с классами), которое тебе посоветовал YuG, - тоже удачная идея, так часто делают.

Автор: JUncle 20.1.2007, 16:39
Цитата(tux @  20.1.2007,  11:09 Найти цитируемый пост)
Вот такой код в Томкате работает, в других веб-контейнерах тоже должен. Возвращает путь до корня приложения (тот путь, куда веб-контейнер приложение развернул).

Иван Человеков,  именно так, а сам файл храни в какой-нибудь подпапке WEB-INF (она извне недоступна).
ЗЫ: а вообще советую настройки хранить в XML файле. Но это так... на будущее.

Автор: Иван Человеков 21.1.2007, 14:00
Спасибо tux  smile  получилось smile 
YuG спасибо за вариант smile но хочется хранить в папке приложения smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)