Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Свойства web-приложений


Автор: JVM 7.12.2009, 18:56
Есть набор свойств общие для нескольких web-приложений. При сборке копирую их в файл "WEB-INF/resourses/my.properties"
Хочу загрузить их
Код

        String MY_PROPERTIES = "../../resourses/my.properties"; //пробую всякие пути

        InputStream myPropertiesInputStream = null;
        try {
            ClassLoader loader = MyAction.class.getClassLoader();
            myPropertiesInputStream = loader.getResourceAsStream(MY_PROPERTIES);
...


но загрузки не происходит.
Загрузка происходит из Action (struts) в блоке static.

Что делаю не так? Как можно загрузить эти свойства?

Автор: ivanovpv 7.12.2009, 22:52
.properties должен лежать в CLASSPATH... Либо включите resources в класспаз или же положите properties в classes

Автор: JVM 8.12.2009, 11:48
ivanovpv, спасибо. Разобрался.
А почему .properties должен лежать в classes? На это есть какая-то документация?

Если свойства будут лежать в WEB-INF/resources, как к ним добраться?

Автор: ivanovpv 8.12.2009, 12:36
Цитата(JVM @  8.12.2009,  11:48 Найти цитируемый пост)
А почему .properties должен лежать в classes? На это есть какая-то документация?


По кочану, потому что http://java.sun.com/javase/6/docs/technotes/tools/windows/classpath.html

Цитата(JVM @  8.12.2009,  11:48 Найти цитируемый пост)
Если свойства будут лежать в WEB-INF/resources, как к ним добраться? 


Добавить в startup скрипт сервера добавление в CLASSPATH этого каталога. Настоятельно не рекомендую делать этого поскольку спецификация Java Servlet предусматривает 2 каталога: WEB-INF/classes и WEB-INF/lib, которые должны находиться в класспазе. Любые сторонние каталоги не будут автоматически в CLASS PATH соответственно приложение будет непортабельным и будет зависеть от сервера (или способа его запуска). 

Автор: JVM 8.12.2009, 16:28
Согласен, что из предложенных вариантов лучше положить свойства в папку classes.

Но не могу понять почему они должны быть обязательно в classes? Из документации я так и не понял почему.

Автор: serger 8.12.2009, 18:02
Цитата(JVM @  8.12.2009,  16:28 Найти цитируемый пост)
Но не могу понять почему они должны быть обязательно в classes? Из документации я так и не понял почему.

А я не понимаю почему таки не понятно.  smile 
Можно задуматься, а как ещё можно сделать?
Просто java загружает классы через classpath, логично, что ресурсы, при отсутствии явных указаний, проще грузить так же.

Автор: JVM 8.12.2009, 18:11
Цитата(serger @ 8.12.2009,  18:02)
Цитата(JVM @  8.12.2009,  16:28 Найти цитируемый пост)
Но не могу понять почему они должны быть обязательно в classes? Из документации я так и не понял почему.

А я не понимаю почему таки не понятно.  smile 
Можно задуматься, а как ещё можно сделать?
Просто java загружает классы через classpath, логично, что ресурсы, при отсутствии явных указаний, проще грузить так же.

Потому, что классы, свойства можно загружать из любого источника - не обязательно файловой системы.

Было сказано, что он  должен там лежать. Вот поэтому и не понятно.

Автор: serger 8.12.2009, 18:33
Ну а в файловой системе, по-умолчанию, в classpath?  smile 

Автор: ivanovpv 9.12.2009, 08:38
Цитата(JVM @  8.12.2009,  16:28 Найти цитируемый пост)
Но не могу понять почему они должны быть обязательно в classes? Из документации я так и не понял почему.


Эээ батенька, философию любите значит? Действительно в документации не пишется почему - там пишется что вот там то и все:
Цитата

The class path is the path that the Java runtime environment searches for classes and other resource files.


Если копать глубже то я думаю все идет от переменной $PATH активно используемой в том же UN*X (а потом уже и в виндах), $CLASSPATH совершенно очевидно введен именно по аналогии с ним.

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