2008-11-18 5 views
8

Я использую Tomcat 5.5 в качестве контейнера сервлета. Мое веб-приложение развертывается через .jar и имеет некоторые файлы ресурсов (текстовые файлы со строками и параметрами конфигурации), расположенные в его каталоге WEB-INF. Tomcat 5.5 работает на ubuntu linux. Файл ресурсов считываются с устройством для чтения файла:
fr = new FileReader("messages.properties");tomcat 5.5 - проблема с файлами ресурсов чтения

Проблема заключается в том, что иногда сервлет не может найти файл ресурсов, но если я перезагрузить его пару раз он работает, то через некоторое время перестает работать. Может кто-нибудь предложить, что является лучшим способом чтения строк ресурсов из сервлета? Или обходной путь для этой проблемы? Внесение файлов ресурсов в WEB-INF/классы тоже не помогает.

ответ

5

Я предполагаю, что проблема заключается в том, что вы пытаетесь использовать относительный путь для доступа к файлу. Использование абсолютного пути должно помочь (т. Е. «/home/tomcat5/properties/messages.properties»).

Однако обычным решением этой проблемы является использование метода getResourceAsStream класса ClassLoader. Развертывание файла свойств в «WEB-INF/classes» сделает его доступным для загрузчика классов, и вы сможете получить доступ к потоку свойств.

Непроверено прото-код:

Properties props = new Properties(); 

InputStream is = 
getClass().getClassLoader().getResourceAsStream("messages.properties"); 

props.load(is); 
2

Если вы используете

new FileReader("message.properties"); 

Тогда FileReader попытается прочитать этот файл из базового каталога - который в Tomcat может быть/бен папка.

Как упомянуто в diciu, используйте абсолютный путь или загрузите его как ресурс загрузчика классов.

9

Если вы пытаетесь получить доступ к этому файлу из класса, поддерживающего сервлет, например, ContextListener или другого прослушивателя жизненного цикла, вы можете использовать объект ServletContext для получения пути к ресурсу.

Эти три являются примерно эквивалентными. (Не путать getResourceAsStream так же, как и выданные ClassLoader класса Они ведут себя очень по-разному.)

void myFunc(ServletContext context) { 
    //returns full path. Ex: C:\tomcat\5.5\webapps\myapp\web-inf\message.properties 
    String fullCanonicalPath = context.getRealPath("/WEB-INF/message.properties"); 

    //Returns a URL to the file. Ex: file://c:/tomcat..../message.properties 
    URL urlToFile = context.getResource("/WEB-INF/message.properties"); 

    //Returns an input stream. Like calling getResource().openStream(); 
    InputStream inputStream = context.getResourceAsStream("/WEB-INF/message.properties"); 
    //do something 
} 
2

Я использую следующий код для загрузки файла свойств изнутри сервлета:

public void init(ServletConfig config) throws ServletException { 
    String pathToFile = config.getServletContext().getRealPath("") 
     + "/WEB-INF/config.properties"; 
    Properties properties = new Properties(); 
    properties.load(new FileInputStream(pathToPropertiesFile)); 
} 

Это работает с Tomcat 6.0

0

Я использовал для JBoss Seam:

ServletLifecycle.getServletContext().getRealPath("")

+2

Что это связано с вопросом, который был задан? – 2009-11-11 02:14:15

 Смежные вопросы

  • Нет связанных вопросов^_^