Спросите себя первым: те константы действительно, имеющие отношение к Struts2 или просто в приложении ?
Если позже это на самом деле не вопрос Struts2, и вы не хотите привязывать вас к «константам» для управления Struts2 (или web.xml), они должны быть доступны из вашего кода приложения за пределами webapp (например, из некоторого кода тестирования).
Я понимаю, что вы чувствуете себя плохо «harcoding» констант в некоторых (скажем) Константы класса (со статическими конечными полями), но имейте в виду, что это может быть не так плохая практика -если они на самом деле постоянные, вряд ли для изменения независимо от вашего java-кода. Стоит подумать.
Если нет, то вам может понадобиться ConstantsManager класс, который может быть одноэлементно без гражданства объект (или какой-то объект «Service»), который знает, как загрузить константы, например, из некоторого файла свойств в CLASSPATH. Как объекты вашего приложения (в том числе, возможно, некоторые действия Struts2) получают ссылку на экземпляр ConstantsManager? В простейшей (и самой грязной) реализации у вас будет реализация шаблона Singleton со статическим методом getInstance(). Более гибким и модным является способ DI/IOC, возможно, с контейнером для бобов, как Весна; и Struts2 хорошо подходит для игры с that. И если вы не знакомы с этими понятиями, они наверняка появятся в ближайшее время, поскольку проблемы похожи (но менее тривиальны), которые обращаются к некоторым константам.
Вы поднимаете интересные моменты. В моем приложении есть две категории параметров (демо для программного обеспечения идентификации музыки на основе контента): параметры алгоритма (математический материал) и веб-демо-параметры (например,какой каталог использовать для обработки загруженных файлов). Я закончил тем, что сохранил последний файл .properties, который я загружаю
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config.properties");
У меня все еще есть ощущение, что это довольно неэлегантно. Я рассмотрю ваши предложения, спасибо за ваш ответ –