| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > подключение файла *.properties |
| Автор: katala 13.5.2006, 17:56 | ||||||
| у меня такая проблема. есть файл filter.properties в web.xml пишу
потом в классе
и при запуске проекта появляется на консоли ошибка
хотя именно там файл и лежит. не понятно в чем проблема. может вы подскажите |
| Автор: ALKS 13.5.2006, 18:16 |
| зачем таким жутким способом properties читатать???? это специально задуманный мазохизм? |
| Автор: katala 13.5.2006, 18:33 | ||
| поскажи правильный способ. я ведь толком с ними и не работал Добавлено @ 18:35 не класс фильтр у меня там по другим причинам используется. вот само подключение
|
| Автор: w1nd 13.5.2006, 21:04 |
| Я не уверен, что в WEB-INF можно вот так запросто лазить. Если апликуха не запакована, то поможет ServletContext.getRealPath(). |
| Автор: ALKS 13.5.2006, 21:40 | ||||
класс java.util.ResourceBundle предназначен, в частности, для того чтобы работать с файлам properties. три основных пакета: java.lang, java.io и java.util . ты должен знать для чего предназначен каждый класс в этих пакетах. katala, правильно ты с properties не работал никогда. но разобраться самостоятельно конечно не так просто как спросить на форуме и особо не вникая схватить готовое решение. не помню, писал я тебе или нет, но повторюсь - найди и прочти полностью одну книгу по Java. и еще настоятельно рекомендую хотябы проглядеть все статьи по java вот отсюда: http://forum.vingrad.ru/index.php?act=module&module=vingradfaq времени много не займет, а представление получиш о очень многих аспектах. |
| Автор: Tirael 13.5.2006, 21:51 | ||||
| Слушь....название какое-то знакомое )))) Ты бы попросил, я бы тебе готовый дал То что ты делаешь, надо делать наверное не в фильтре, а в листенере. Вот, например так :
а в web.xml вот что записанно
Настораживает то, почему у тебя в стэк-трэйсе слэш не туда смотрит? Возможно, действительно попробуй через realPath А почему бы и нет ? Добавлено @ 22:01 Еще одна вещь. В настройках проекта у тебя папочка /WEB-INF/conf причисленна к Source Folders ? Если нет, попробуй запихнуть не в /conf, а в /WEB-INF/classes. |
| Автор: onsh76 14.5.2006, 01:56 |
| katala, Простой совет начинающему: properties файлы должны быть в classpath-е. Tirael тебе уже подсказал что к чему. Если решил всерьез заниматься JEE web applications , то сервлет спекс - это как библия... Удачи. |
| Автор: katala 14.5.2006, 13:16 | ||||||
вот как я сделал(и все пркрасно работает)
вот с этим я не согласен и с этим тоже
|
| Автор: Tirael 14.5.2006, 13:54 |
| И все таки рекомендую сделать чтение .properties не в фильтре, а в листенере. А сам объект Properties p сохранять в контескте. Ибо: 1. Фильтры немного не для того преднозначенны. 2. Ты можешь захотеть обратиться к данным из этого файла еще несколько, но уже из других мест. |
| Автор: katala 14.5.2006, 14:00 | ||||
ну во-первых фильтр не для этого и в методе public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException вроде написано. а на счет 2 пункта достигается одной строкой
|
| Автор: Tirael 14.5.2006, 15:46 |
| Стоп... У тебя для каждой сессии будет свой пропери ? А зачем ? |
| Автор: katala 14.5.2006, 15:53 |
| почему???? он ведь один и тот же. |
| Автор: Tirael 14.5.2006, 17:09 | ||
Один то он один, но зато в каждой сессии.
ты для каждого нового клиента делаешь новый атрибут. А зачем ? Это же нехорошо. Клиентов много - много сессий - много одинаковых объектов. Сохраняй в контекст одну копию, а потом можешь доставать ее когда тебе надо. |
| Автор: katala 14.5.2006, 18:56 |
| самое интересное что мне и нужно на каждого клиента своя сессия поэтому здесь так я думаю можно сделать. а вообще в других случаях может ты и прав надо делать подругому но в данной ситуации это не значительно |
| Автор: Tirael 14.5.2006, 21:05 |
| Я тебя не понял. Или ты меня не понял. Или то и другое сразу..... Чтоб убрать непонятки, скажи: Твой объект Properties p изменяется в программе ? Если да, то изменения в нем должны влиять на всех пользователей, или только и исключительно на одного ? З.Ы. Я считаю, что хранить сами объекты в сессии нехорошо. И тому есть причины. Чтобы изменить объект, который храниться в сессии, ты должен: 1. Достать его из сессии. 2. Изменить объект 3. Опять записать уже измененый объект обратно в сессию. Слишком накладно. Как насчет того, чтоб хранить в сессии не сам объект, а некоторый его идентефикатор. Тогда, чтоб изменить объект тебе надо будет: 1. Достать идентефикатор из сессии 2. Найти объек через идентефикатор 3. Изменить объект На мой взгляд это удобнее, быстрее, красивее. |
| Автор: katala 14.5.2006, 22:51 | ||||
нет я только беру оттуда данные. а по поводу этого
я тоже только беру объек. поэтому на скорость не влияет |
| Автор: Tirael 14.5.2006, 23:09 | ||||
Ну тогда зачем хранить эти данные в КАЖДОЙ сессии ? Сохрани из в КОНТЕКСТЕ. Один раз. На все времена. И будет тебе счастье ..... Вот полный пример листенера, который, в моем случае, читает данные из файла .properties (а именно: имена и описания комнат чата), создает соответствующие объекты (комнаты чата, список комнат чата) и сохраняет нужный объект в контексте ( список комнат чата)
Потом можно легко получить данный объект. Например (из сервлета) вот так :
|