Почему у меня возникают проблемы с доступом к файлу .properties в автономном экземпляре tomcat, но не в экземпляре, встроенном в eclipse?

Я написал простой сервлет Hello World в Eclipse, содержащий следующее в методе doGet моего HelloWorldServlet.java.


PrintWriter writer = response.getWriter();
String hello = PropertyLoader.bundle.getProperty("hello");
writer.append(hello);
writer.flush();

PropertyLoader — это простой класс в том же пакете, что и сервлет, который делает следующее:


public class PropertyLoader {
    public static final Properties bundle = new Properties();

    static {
        InputStream stream = null;
        URL url = PropertyLoader.class.getResource("/helloSettings.properties");
        stream = new FileInputStream(url.getFile());
        bundle.load(stream);         
    }
}//End of class

Я поместил файл helloSettings.properties в папку /WebContent/WEB-IND/classes, содержащий следующую строку содержимого:

hello=Hello Settings World

Когда я добавляю Tomcat 6.0 в свой проект и запускаю его в eclipse, он успешно печатает

«Hello Settings World» в веб-браузере.

Однако, когда я экспортирую проект как военный файл и вручную помещаю его в .../Tomcat 6.0/webapps, я получаю в результате "null".

Это проблема с конфигурацией classpath/classloader? разрешения? любой из других файлов конфигурации? Я точно знаю, что файл helloSettings.properties находится в папке WEB-INF/classes.

Любая помощь?


person sonrael    schedule 07.08.2010    source источник
comment
Вы открыли файл войны в каталоге tomcat и подтвердили наличие файла свойств? Как вы размещаете. Затем файл свойств в каталоге WEB-INF?   -  person Aaron Saunders    schedule 07.08.2010
comment
Да, я подтвердил, что файл свойств правильно попал в файл войны. Я использовал контекстное меню папки WEB-INF в своем веб-проекте eclipse, чтобы создать папку /classes, а затем создал файл свойств из контекстного меню папки классов.   -  person sonrael    schedule 08.08.2010


Ответы (1)


Что ж, после долгих просмотров я нашел то, что кажется «нормальным», зачем делать то, что я пытаюсь сделать:

Вместо ... (как я это делал)

public class PropertyLoader { 

    public static final Properties bundle = new Properties();

    static { 

        InputStream stream = null; 
        URL url = PropertyLoader.class.getResource("/helloSettings.properties"); 
        stream = new FileInputStream(url.getFile()); 
        bundle.load(stream);

    } 

}//End of class

ИСПРАВЛЕНИЕ

public class PropertyLoader { 

    public static final Properties bundle = new Properties();

    static { 

        InputStream stream = null;
        stream = SBOConstants.class.getResourceAsStream("/sbonline.properties");
        bundle.load(stream);

    } 

}//End of class

Я модифицирую чужой код, поэтому я не уверен, почему они изначально сделали это по-другому... но я думаю, что url.getFile() была моей проблемой, и я не знаю, почему.

person sonrael    schedule 08.08.2010