在web.xml中定义了context-param,一般不会随意改动,所以在监听器中做一次处理,容器启动时读取并存储在Properties中,方便以后取值。
SysProperties 类用于存储 context 键值;
SystemListener 监听器类,处理 context-param 参数。
/** * 用于存储参数键值 */ public final class SysProperties { private static SysProperties instance; private Properties initProperties = new Properties(); private SysProperties() { } public static SysProperties getInstance() { if (instance == null) { instance = new SysProperties(); } return instance; } /** * 获取对应的值 * @param key String 提供的键(param-name) * @return String 键对应的值(param-value) */ public String getProperty(String key) { return this.initProperties.getProperty(key); } /** * 检测是否包含该键 * @param key String 键 * @return boolean 该键存在返回 true,否则返回 false */ public boolean containsKey(String key) { return this.initProperties.containsKey(key); } /** * 存储参数 * @param key String param-name * @param object String param-value */ public void put(String key, String object) { this.initProperties.put(key, object); } }
/** * 系统监听,程序启动时初始化并存储相关参数 */ public class SystemListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { initContextParam(servletContextEvent); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { } private void initContextParam(ServletContextEvent event) { Enumeration<String> names = event.getServletContext().getInitParameterNames(); while (names.hasMoreElements()) { String name = names.nextElement(); String value = event.getServletContext().getInitParameter(name); SysProperties.getInstance().put(name, value); } } }