package litestruts; import static util.Print.println; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdom2.input.SAXBuilder; public class Configuration { private static class ActionCfg { String name; String clz; Map<String, String> viewResult = new HashMap<>(); public ActionCfg(String name, String clz) { this.name = name; this.clz = clz; } public void addViewResult(String result, String jsp) { viewResult.put(result, jsp); } public String getClassName() { return clz; } public Map<String, String> getViewResult() { return viewResult; } } private static Configuration cfg = new Configuration(); public static Configuration getNewInstance() { if (cfg == null) { cfg = new Configuration(); } return cfg; } public static void main(String[] args) { Configuration cfg = new Configuration(); cfg.parse("struts.xml"); String clz = cfg.getClassName("login"); println(clz); } Map<String, ActionCfg> actions = new HashMap<>(); private Configuration() { } public String getClassName(String action) { ActionCfg cfg = this.actions.get(action); if (cfg == null) { return null; } return cfg.getClassName(); } public String getResultView(String action, String resultName) { ActionCfg cfg = this.actions.get(action); if (cfg == null) { return null; } return cfg.getViewResult().get(resultName); } public void parse(String fileName) { String src = this.getClass().getPackage().getName(); String filepath = src.replace(".", "/") + "/" + fileName; InputStream is = this.getClass().getResourceAsStream("/" + filepath); parseXML(is); try { is.close(); } catch (IOException e) { } } public void parseXML(InputStream is) { SAXBuilder reader = new SAXBuilder(); try { Document doc = reader.build(is); Element root = doc.getRootElement(); for (Element element : root.getChildren("action")) { String actionName = element.getAttributeValue("name"); String clz = element.getAttributeValue("class"); ActionCfg ac = new ActionCfg(actionName, clz); for (Element e : element.getChildren("result")) { String result = e.getAttributeValue("name"); String jsp = e.getText().trim(); ac.addViewResult(result, jsp); } actions.put(actionName, ac); } } catch (JDOMException | IOException e) { e.printStackTrace(); } } }