Прочитать файл свойств из webapp из зависимости [duplicate]

(Caveat: Я не программист на Java, я программист Perl. Perl не имеет формальных защит, и, возможно, поэтому я так хорошо понимаю проблему :))

Private

Как вы думаете, это может увидеть только класс, в котором он был объявлен.

Пакет Private

Может отображаться и использоваться только пакетом, в котором он был объявлен , Это значение по умолчанию в Java (которое некоторые считают ошибкой).

Защищенный

Пакет Private + можно увидеть подклассами или членами пакета.

Public

Каждый может видеть это.

Опубликован

Видимый вне кода, который я контролирую. (Хотя это не синтаксис Java, это важно для этого обсуждения).

C ++ определяет дополнительный уровень, называемый «friend», и чем меньше вы знаете, тем лучше.

Когда вы должны использовать что? Вся идея заключается в инкапсуляции, чтобы скрыть информацию. Насколько это возможно, вы хотите скрыть детали того, как что-то делается от ваших пользователей. Зачем? Потому что тогда вы можете изменить их позже и не нарушать чей-то код. Это позволяет оптимизировать, реорганизовывать, реорганизовывать и исправлять ошибки, не опасаясь, что кто-то использует этот код, который вы только что пересмотрели.

Итак, эмпирическое правило - сделать вещи такими же видимыми, как и должно быть. Начните с частных и только добавьте больше видимости по мере необходимости. Публикуйте только то, что абсолютно необходимо знать пользователю, каждая деталь, которую вы делаете публичными судорогами, позволяет вам редизайн системы.

Если вы хотите, чтобы пользователи могли настраивать поведение, а не делать внутренние сообщения общедоступными поэтому они могут переопределить их, часто лучше перетащить эти кишки в объект и сделать этот интерфейс общедоступным. Таким образом, они могут просто подключить новый объект. Например, если вы пишете проигрыватель компакт-дисков и хотите, чтобы бит «идти найти информацию об этом компакт-диске» настраивался, а не публиковать эти методы, вы включили бы все эти функции в свой собственный объект и сделали бы свой объект getter / setter общедоступным , Таким образом, скупость о том, чтобы разоблачить ваши кишки, поощряет хороший состав и разделение проблем

Лично я придерживаюсь только «частных» и «публичных». У многих языков OO есть это. «Защищенный» может пригодиться, но это действительно чит. Когда интерфейс более чем частный, он находится вне вашего контроля, и вам нужно искать в коде других людей, чтобы найти его.

Здесь возникает идея «опубликования». Изменение интерфейса (рефакторинг он) требует, чтобы вы нашли весь код, который его использует, и измените это. Если интерфейс частный, то проблем нет. Если он защищен, вам нужно найти все ваши подклассы. Если это общедоступно, вам нужно найти весь код, который использует ваш код. Иногда это возможно, например, если вы работаете с корпоративным кодом, который используется только для внутреннего использования, не имеет значения, открыт ли интерфейс. Вы можете извлечь весь код из корпоративного репозитория. Но если интерфейс «опубликован», если есть код, использующий его вне вашего контроля, тогда вы будете закрыты. Вы должны поддерживать этот интерфейс или код нарушения риска. Даже защищенные интерфейсы можно считать опубликованными (поэтому я не беспокоюсь о защите).

Многие языки считают, что иерархический характер public / protected / private слишком ограничен и не соответствует действительности. С этой целью существует понятие класса trait , но это еще одно шоу.

1
задан Jean-Rémy Revy 8 October 2012 в 12:17
поделиться

4 ответа

Корень пути к классам - путь. Поместите свой файл в src / main / resources / auth.properties , затем установите resourcePath , используя realm.setResourcePath ("classpath: auth.properties");

Проверьте ExtendedPropertiesRealm и testapp для проверки гобеленов для примера

2
ответ дан ascandroli 26 August 2018 в 13:40
поделиться

Попробуйте ServletContext.getResourceAsStream("/WEB-INF/auth.properties") или ServletContext.getResourceAsStream("WEB-INF/auth.properties")

ServletContext должен использоваться из сервлета, servletListener и т. д.

4
ответ дан Andrzej Jozwik 26 August 2018 в 13:40
поделиться

Я нашел, что самый простой способ -

  • поместить файл в src / main / resources / config.properties. Это будет помещено в /WEB-INF/classes/config.properties, когда проект скомпилирован maven в WAR
  • , прочитав файл из сервлета со следующим InputStreaminputStream = getClass (). GetClassLoader (). getResourceAsStream ("config.properties");

https://crunchify.com/java-properties-file-how-to-read-config-properties-values-in -java /

0
ответ дан Colin D 26 August 2018 в 13:40
поделиться

Попробуйте

Properties props = new Properties();
props.load(new FileInputStream(new File(req.getServletContext().getRealPath("/WEB-INF/fileName.properties"))));
System.out.println(props);
0
ответ дан David 26 August 2018 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: