1.在web.xml文件中配置如下段代码,其中StatisticsFile.xml文件是自定义的xml文件:
<context-param>
<param-name>statisticsConfig</param-name>
<param-value>/StatisticsFile.xml</param-value>
</context-param>
2.在web.xml文件中对监听器的配置如下:
<listener>
<description>loading app.properties</description>
<listener-class>com.cfets.imix.util.SysListener</listener-class>
</listener>
3.Sytlistener.java类,主要作用是获取xml文件
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
public class SysListener extends HttpServlet implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {}
public void contextInitialized(ServletContextEvent sce) {
ServletContext sc = sce.getServletContext();
String appName = sc.getContextPath().replace("/", "");//获得应用名称
sc.log("[imix] get app config files");
//获取配置文件名,statisticsConfig是在web.xml文件配置过的
String statisticsFileName = sc.getInitParameter("statisticsConfig");
StatisticsConfig.initKeyValue(statisticsFileName, appName);//解析xml文件
}
}
4.StatisticsConfig.java类,主要作用是:解析xml文件,把解析后的数据放入到map集合中,方便再其它类中调用
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import com.cfets.imix.pojo.StatisticsData;
public class StatisticsConfig {
private static Map<String,String> maps = new HashMap<String,String>();
private static String applicationName = "";
public static Map<String, String> getMaps() {
return maps;
}
public static void initKeyValue(String appConfigName,String appName){
pplicationName = (appName == null?"":appName);
if(applicationName == null || appConfigName.trim().length() == 0){
printLog("未能获得启动配置文件名称,应用将停止");
System.exit(0);
}
try{
printLog("加载启动配置文件:"+appConfigName);
InputStream is = StatisticsConfig.class.getResourceAsStream(appConfigName);
if(is == null) throw new Exception("app启动配置路径错误!");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
Element root = doc.getDocumentElement();
NodeList nodeList = root.getElementsByTagName("item");
for(int i=0;i<nodeList.getLength();i++){
StatisticsData sd = new StatisticsData();
String name =
doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue();
String url = doc.getElementsByTagName("url").item(i).getFirstChild().getNodeValue();
maps.put(url, name);
}
}catch(Exception e){
printLog("初始化启动配置文件StatisticsFile.xml文件有误!");
e.printStackTrace();
System.exit(0);
}
}
public static void printLog(String msg){
System.out.println("[" + applicationName + "] " + getTimeString()
+ " - " + StatisticsConfig.class.toString() + " - " + msg);
}
public static String getTimeString(){
String timeString = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS");
timeString = sdf.format(new Date(System.currentTimeMillis()));
return timeString;
}
public static void setMaps(Map<String, String> maps) {
StatisticsConfig.maps = maps;
}
public static String getApplicationName() {
return applicationName;
}
public static void setApplicationName(String applicationName) {
StatisticsConfig.applicationName = applicationName;
}
}