Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подключение файла *.properties 
:(
    Опции темы
katala
Дата 13.5.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 15.4.2006

Репутация: нет
Всего: нет



у меня такая проблема. есть файл filter.properties
в web.xml пишу 
Код

<filter>    
        <filter-name>SessionCheckerFilter</filter-name>    
        <filter-class>filter.SessionCheckerFilter</filter-class>    
        <init-param>
            <param-name>properties</param-name>
            <param-value>/WEB-INF/conf/filter.properties</param-value>
        </init-param>
    </filter>

потом в классе 

Код

public class SessionCheckerFilter implements Filter {    
    private String filter_properties; 
    Properties p = new Properties();
    public void init(FilterConfig filterConfig) throws ServletException {    
        filter_properties=filterConfig.getInitParameter("properties");
        if (filter_properties == null || filter_properties.length() == 0) {
            filter_properties = filterConfig.getServletContext().getInitParameter("properties");
        }
        try {
              p.load(new FileInputStream(filter_properties));
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("FileNotFound");
        } catch (IOException e) {
            System.out.println("IOException");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

и при запуске проекта появляется на консоли ошибка 
Код


java.io.FileNotFoundException:\WEB-INF\conf\filter.properties (Системе не удается найти указанный путь)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:106)
    at java.io.FileInputStream.<init>(FileInputStream.java:66)
    at filter.SessionCheckerFilter.init(SessionCheckerFilter.java:23)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:225)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:308)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:79)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3698)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4349)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
    at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277)
    at org.apache.catalina.core.StandardHost.install(StandardHost.java:832)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:701)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
    at org.apache.catalina.core.StandardService.start(StandardService.java:480)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
FileNotFound

хотя именно там файл и лежит. не понятно в чем проблема. может вы подскажите 
PM MAIL   Вверх
ALKS
Дата 13.5.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 6
Всего: 11



 зачем таким жутким способом properties читатать???? это специально задуманный мазохизм? 
PM   Вверх
katala
Дата 13.5.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 15.4.2006

Репутация: нет
Всего: нет



поскажи правильный способ. я ведь толком с ними и не работал

Добавлено @ 18:35 
не класс фильтр у меня там по другим причинам используется. вот само подключение
Код

filter_properties=filterConfig.getInitParameter("properties");    
        if (filter_properties == null || filter_properties.length() == 0) {    
            filter_properties = filterConfig.getServletContext().getInitParameter("properties");    
        }    
        try {    
              p.load(new FileInputStream(filter_properties));    
            }
 
PM MAIL   Вверх
w1nd
Дата 13.5.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 7
Всего: 54



Я не уверен, что в WEB-INF можно вот так запросто лазить. Если апликуха не запакована, то поможет ServletContext.getRealPath(). 


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
ALKS
Дата 13.5.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 6
Всего: 11



Цитата(katala @ 13.5.2006,  18:33)
поскажи правильный способ. я ведь толком с ними и не работал

Добавлено @ 18:35 
не класс фильтр у меня там по другим причинам используется. вот само подключение
Код

filter_properties=filterConfig.getInitParameter("properties");    
        if (filter_properties == null || filter_properties.length() == 0) {    
            filter_properties = filterConfig.getServletContext().getInitParameter("properties");    
        }    
        try {    
              p.load(new FileInputStream(filter_properties));    
            }

класс java.util.ResourceBundle предназначен, в частности, для того чтобы работать с файлам properties.

три основных пакета: java.lang, java.io и java.util . ты должен знать для чего предназначен каждый класс в этих пакетах.

katala, правильно ты с properties не работал никогда. но разобраться самостоятельно конечно не так просто как спросить на форуме и особо не вникая схватить готовое решение. не помню, писал я тебе или нет, но повторюсь - найди и прочти полностью одну книгу по Java. и еще настоятельно рекомендую хотябы проглядеть все статьи по java вот отсюда: http://forum.vingrad.ru/index.php?act=modu...dule=vingradfaq 
времени много не займет, а представление получиш о очень многих аспектах.  
PM   Вверх
Tirael
Дата 13.5.2006, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 31.1.2006
Где: Москва

Репутация: 1
Всего: 7



Слушь....название какое-то знакомое )))) 
Ты бы попросил, я бы тебе готовый дал  smile  smile  smile 

То что ты делаешь, надо делать наверное не в фильтре, а в листенере. 
Вот, например так :
Код

import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletException;
import java.util.ResourceBundle;
import java.util.Properties;
import java.util.Enumeration;
import java.io.InputStream;
import java.io.FileInputStream;

public class LocalePropertiesListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent sce) {

    }
    public void contextInitialized(ServletContextEvent sce) {

        Properties props;
        String path = "/WEB-INF/classes/" + sce.getServletContext().getInitParameter("ChatPropertyFileName");
        path = sce.getServletContext().getRealPath(path);
        try {
            if (path != null) {
                InputStream fis = new FileInputStream(path);
                props=new Properties();
                props.load(fis);

                // многа кода

                fis.close();
        } catch(Exception e) {};
    }
}


а в web.xml вот что записанно
Код

    <context-param>
        <param-name>ChatPropertyFileName</param-name>
        <param-value>roomList.properties</param-value>
    </context-param>
...............................
    <listener>
        <listener-class>ru.vchat.web.listeners.LocalePropertiesListener</listener-class>
    </listener>


Цитата(katala @  13.5.2006,  17:56 Найти цитируемый пост)
 не понятно в чем проблема. может вы подскажите 

Настораживает то,  почему у тебя в стэк-трэйсе слэш не туда смотрит?
Возможно, действительно попробуй через realPath

Цитата(w1nd @  13.5.2006,  21:04 Найти цитируемый пост)
Я не уверен, что в WEB-INF можно вот так запросто лазить.

А почему бы и нет ?

Добавлено @ 22:01 
Еще одна вещь. В настройках проекта у тебя папочка /WEB-INF/conf причисленна к Source Folders ? Если нет, попробуй запихнуть не в /conf, а в /WEB-INF/classes.  

Это сообщение отредактировал(а) Tirael - 14.5.2006, 12:30
--------------------
 
PM MAIL   Вверх
onsh76
Дата 14.5.2006, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 20.11.2005
Где: Beautiful BC

Репутация: 4
Всего: 5



katala, 
Простой совет начинающему: properties файлы должны быть в classpath-е. 
Tirael тебе уже подсказал что к чему. 
Если решил всерьез заниматься JEE web applications , то сервлет спекс - это как библия... 
Удачи. 
PM MAIL   Вверх
katala
Дата 14.5.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 15.4.2006

Репутация: нет
Всего: нет



вот как я сделал(и все пркрасно работает)

Код

package filter;
import javax.servlet.*;
import javax.servlet.GenericServlet;
import javax.servlet.http.HttpServletRequest;    
import javax.servlet.http.HttpServletResponse;    
import javax.servlet.http.HttpSession;    

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;


public class SessionCheckerFilter implements Filter {    
    private String filter_properties; 
    Properties p = new Properties();
    public void init(FilterConfig filterConfig) throws ServletException  {    
        filter_properties=filterConfig.getInitParameter("properties");
        if (filter_properties == null || filter_properties.length() == 0) {
            filter_properties = filterConfig.getServletContext().getInitParameter("properties");
        }
        try{
            if (filter_properties != null) {
                String realPath = filterConfig.getServletContext().getRealPath(filter_properties);
                if (realPath != null) {
                    filter_properties = realPath;
                }
                p.load(new FileInputStream(filter_properties));
            }
        }catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("FileNotFound");
        } catch (IOException e) {
            System.out.println("IOException");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }    
    public void destroy() {    
    }    
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {    
        HttpServletRequest req = (HttpServletRequest) request;    
        HttpServletResponse res = (HttpServletResponse) response;    
        String contextPath = req.getContextPath();    
        String RequestURI =req.getRequestURI();
        HttpSession session = req.getSession(false);    
        //if(p.getProperty(req.getRequestURI()).equals("deny"))
        //System.out.println("RequestURI="+RequestURI+" p.getProperty(req.getRequestURI()= "+p.getProperty(RequestURI)+"!");
        
        if(session==null){
            req.getSession(true);
            req.getSession(false).setAttribute("property",p);
        }
        
        if( (session!=null && session.getAttribute("client")!=null) || p.getProperty(req.getRequestURI()).equals("deny")) {    
            chain.doFilter(request, response);    
        }else 
        {    
            req.getSession(false).setAttribute("request",req.getRequestURI());
            res.sendRedirect(contextPath + "/showLogin.html");    
        }    
    }    
}
.  но ввсе равно спасибо за помощь.

Цитата

Простой совет начинающему: properties файлы должны быть в classpath-е

вот с этим я не согласен
и с этим тоже 
Цитата

Я не уверен, что в WEB-INF можно вот так запросто лазить.
 
PM MAIL   Вверх
Tirael
Дата 14.5.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 31.1.2006
Где: Москва

Репутация: 1
Всего: 7



И все таки рекомендую сделать чтение .properties не в фильтре, а в листенере. А сам объект Properties p сохранять в контескте.

Ибо:
1. Фильтры немного не для того преднозначенны. 
2. Ты можешь захотеть обратиться к данным из этого файла еще несколько, но уже из других мест. 
--------------------
 
PM MAIL   Вверх
katala
Дата 14.5.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 15.4.2006

Репутация: нет
Всего: нет



Цитата

1. Фильтры немного не для того преднозначенны. 
2. Ты можешь захотеть обратиться к данным из этого файла еще несколько, но уже из других мест

ну во-первых фильтр не для этого и в методе  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException  вроде написано. 
а на счет 2 пункта достигается  одной строкой
    
 
Код

Properties p=(Properties)request.getSession(false).getAttribute("property");
 
PM MAIL   Вверх
Tirael
Дата 14.5.2006, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 31.1.2006
Где: Москва

Репутация: 1
Всего: 7



Стоп...

У тебя для каждой сессии будет свой пропери ? 
А зачем ? 
 
--------------------
 
PM MAIL   Вверх
katala
Дата 14.5.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 15.4.2006

Репутация: нет
Всего: нет



почему???? он ведь один и тот же.  
PM MAIL   Вверх
Tirael
Дата 14.5.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 31.1.2006
Где: Москва

Репутация: 1
Всего: 7



Один то он один, но зато в каждой сессии. 

Код

            req.getSession(false).setAttribute("property",p);

ты для каждого нового клиента делаешь новый атрибут.  А зачем ? Это же нехорошо. Клиентов много - много сессий - много одинаковых объектов. Сохраняй в контекст одну копию, а потом можешь доставать ее когда тебе надо. 
--------------------
 
PM MAIL   Вверх
katala
Дата 14.5.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 15.4.2006

Репутация: нет
Всего: нет



самое интересное что мне и нужно на каждого клиента своя сессия поэтому здесь так я думаю можно сделать. а вообще в других случаях может ты и прав надо делать подругому но в данной ситуации это не значительно   
PM MAIL   Вверх
Tirael
Дата 14.5.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 31.1.2006
Где: Москва

Репутация: 1
Всего: 7



Я тебя не понял. Или ты меня не понял. Или то и другое сразу.....
Чтоб убрать непонятки, скажи: 

Твой объект Properties p изменяется в программе ? 
Если да, то изменения в нем должны влиять на всех пользователей, или только и исключительно на одного ? 


З.Ы. Я считаю, что хранить сами объекты в сессии нехорошо. И тому есть причины. Чтобы изменить объект, который храниться в сессии, ты должен:
1. Достать его из сессии.
2. Изменить объект
3. Опять записать уже измененый объект обратно в сессию.


Слишком накладно. Как насчет того, чтоб хранить в сессии не сам объект, а некоторый его идентефикатор. Тогда, чтоб изменить объект тебе надо будет:
1. Достать идентефикатор из сессии
2. Найти объек через идентефикатор
3. Изменить объект


На мой взгляд это удобнее, быстрее, красивее. smile 
 
--------------------
 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0595 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.