需求:将一些关键的参数配置进web.xml,之后在系统任意地方获取
方案:实现一listener,从servletconfig获取context-param参数并存到系统参数
实现:
public class WebAppRootListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
setWebAppRootSystemProperty(event.getServletContext());
}
public void contextDestroyed(ServletContextEvent event) {
WebUtils.removeWebAppRootSystemProperty(event.getServletContext());
}
/**
* @param servletContext
* @throws IllegalStateException
*/
private void setWebAppRootSystemProperty(ServletContext servletContext) throws IllegalStateException {
Assert.notNull(servletContext, "ServletContext must not be null");
String root = servletContext.getRealPath("/");
if (root == null) {
throw new IllegalStateException(
"Cannot set web app root system property when WAR file is not expanded");
}
Enumeration paramsName = servletContext.getInitParameterNames();
while(paramsName.hasMoreElements()){
String key=(String)paramsName.nextElement();
String value = servletContext.getInitParameter(key);
System.setProperty(key, value);
servletContext.log("Set web app system property: '" + key + "' = [" + root + "]");
}
}
}