Реализация ServletContextListener
.
Вот базовый пример:
public class Config implements ServletContextListener {
private static final String ATTRIBUTE_NAME = "config";
private Properties config = new Properties();
@Override
public void contextInitialized(ServletContextEvent event) {
try {
config.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));
} catch (IOException e) {
throw new SomeRuntimeException("Loading config failed", e);
}
event.getServletContext().setAttribute(ATTRIBUTE_NAME, this);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// NOOP.
}
public static Config getInstance(ServletContext context) {
return (Config) context.getAttribute(ATTRIBUTE_NAME);
}
public String getProperty(String key) {
return config.getProperty(key);
}
}
который вы регистрируете следующим образом в web.xml
:
<listener>
<listener-class>com.example.Config</listener-class>
</listener>
и к которым вы можете получить доступ в своих сервлетах следующим образом:
Config config = Config.getInstance(getServletContext());
String property = config.getProperty("somekey");
Подумав, эти свойства на 100% специфичны для бизнес-уровня, а не для самого веб-приложения? Тогда ServletContextListener
действительно неуклюж и слишком тесно связан. Просто предоставьте бизнес-уровню свой собственный класс Config
, который загружает свойства из пути к классам и кэширует его в некоторой переменной static
(возможно, Map<String, Properties>
?).