package com.coderising.litestruts;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class StrutsManager {
private static StrutsManager instance;
private Map<String,StructsAction> actions;
private StrutsManager(){}
public static StrutsManager getInstance()
{
if(instance==null)
{
synchronized (StrutsManager.class) {
if(instance==null)
{
instance=new StrutsManager();
instance.readStrutsXml();
}
}
}
return instance;
}
/**
* 读取struts配置文件
*/
private void readStrutsXml() {
actions = new HashMap<>();
String path = StrutsManager.class.getResource("struts.xml").getFile();
SAXReader reader = new SAXReader();
Document doc;
try {
doc = reader.read(new File(path));
Element root = doc.getRootElement();
//遍历action节点
for(Iterator<?> childIter=root.elementIterator("action");childIter.hasNext();)
{
StructsAction action=new StructsAction();
Element ele=(Element)childIter.next();
String name=ele.attributeValue("name");
String className=ele.attributeValue("class");
//System.out.println(name+":"+className);
action.setName(name);
action.setActionClass(className);
Map<String,String> results=new HashMap<>();
//遍历result节点
for(Iterator<?> resultIter=ele.elementIterator("result");resultIter.hasNext();)
{
Element resultEle=(Element)resultIter.next();
String resultName=resultEle.attributeValue("name");
String resultUrl=resultEle.getText();
results.put(resultName, resultUrl);
//System.out.println(resultName+":"+resultUrl);
}
action.setResults(results);
actions.put(action.getName(), action);
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public StructsAction getAction(String name)
{
return actions.get(name);
}
public static void main(String[] argv) {
StrutsManager instance=StrutsManager.getInstance();
StructsAction actionObj=instance.getAction("login");
System.out.println(actionObj.getName());
System.out.println(actionObj.getActionClass());
System.out.println(actionObj.getResults().get("success"));
System.out.println(actionObj.getResults().get("fail"));
try {
Class.forName("com.coderising.litestruts.LoginAction");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}