Чтение ресурсов веб-приложений - PullRequest
6 голосов
/ 03 марта 2011

Фон

Разработка простого веб-приложения (Eclipse + JBoss + Apache Tomcat) для генерации файлов XML.

Проблема

Список «Бизнес-сфера» запрашивает базу данных, а список «Кластер столбцов» запрашивает базу данных, используя выбранные элементы «Бизнес-сфера». Оба эти уникальных запроса хранятся во внешних текстовых файлах.

В настоящее время файлы хранятся в следующих местах:

  • WebContent / META-INF / бизнес-areas.sql

Затем они используются для посева PreparedStatement с.

Исходный код

Метод чтения кода SQL может выглядеть следующим образом:

  private String getSQL() {
    String result = "";

    try {
      BufferedReader br = open( "business-areas.sql" );
      String line = null;

      while( (line = br.readLine()) != null ) {
        result += line;
      }

      br.close();
    }
    catch( Exception e ) {
      e.printStackTrace();
    }

    return result;
  }

Вопросы

Хотелось бы знать:

  1. Каковы наилучшие методы хранения таких активов для развертывания в составе веб-приложения? (То есть, META-INF хорошее место или META-INF/resources предпочтительнее?)
  2. Какие API вы бы порекомендовали для чтения содержимого файла? (То есть, как мне написать метод open, чтобы он находил файлы, которые нужно открыть?)

У меня уже есть JNDI для установки соединения с базой данных, но я бы не стал использовать JNDI для получения дескрипторов файлов, если это возможно.

Похожие сайты

Спасибо!

Ответы [ 3 ]

6 голосов
/ 03 марта 2011

Правильное расположение (а также обычная практика) - поместить их в каталог source, который затем будет скомпилирован в каталог WEB-INF/classes.Я не уверен, что вы подразумевали под «каталогом классов изменчивым» в своем ответе на @Dave, но именно так большинство (если не все) веб-приложения Java хранят вещи.WEB-INF/classes не только для классов Java.Обычно можно увидеть файл свойств журналирования (например, log4j), файлы XML Hibernate и Spring, хранящиеся в каталоге source, и вы можете безопасно получить доступ к файлам, используя что-то вроде этого: -

// in this case, the business-areas.sql is located right under "source/sql" directory
InputStream is = getClass().getClassLoader().getResourceAsStream("sql/business-areas.sql");
BufferedReader br = new BufferedReader(new InputStreamReader(is));

Некоторая полезная информация оиспользование META-INF: Какова цель META-INF?

4 голосов
/ 03 апреля 2013

У меня были те же проблемы, что и у Дэйва Джарвиса, по поводу смешивания ресурсов с classes и lib, поэтому я немного поиграл и нашел это решение:

Я поместил свои файлы ресурсов в WEB-INF/resources. Затем, чтобы загрузить их, я использовал это:

getClass().getClassLoader().getResourceAsStream("../resources/main.xml");

Я не знаю, что использование .. - намного более чистое решение, но мои файлы по крайней мере не смешаны с классами или банками.

0 голосов
/ 03 марта 2011

Я бы поместил их в классы WEB-INF / или связал их внутри вашего application.jar, который будет находиться внутри WEB-INF / lib. Затем вы можете загрузить их из classpath, как объяснено здесь и здесь

Еще лучше, если вы используете maven, лучше всего поместить файлы такого типа в src / main / resources, и тогда maven позаботится об этом за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...