packagecn.zzsxt.mystruts.framework;importjava.io.InputStream;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importorg.dom4j.Document;importorg.dom4j.DocumentException;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;public classActionMappingManager {//封装struts.xml中所有的action节点信息,以action的name属性值做键,以action节点的信息做值
private Map actionsMap = new HashMap();/*** 解析src下的struts.xml配置文件
* 将action节点的信息封装成ActionMapping对象
* 将result节点信息封装成ResultMapping对象*/
public voidpaserXml(){
SAXReader saxReader= newSAXReader();//查找具有给定名称的资源,将src下的struts.xml转成输入流
InputStream ips =this.getClass().getResourceAsStream("/struts.xml");try{
Document document=saxReader.read(ips);//获取根节点
Element struts =document.getRootElement();
Iterator actionIter = struts.elementIterator();//获取子元素
while(actionIter.hasNext()){
Element action= actionIter.next();//action节点
String actionName = action.attributeValue("name");//获取action节点的name属性值
String actionClass = action.attributeValue("class");//获取action节点的class属性值
ActionMapping actionMapping = new ActionMapping(actionName,actionClass);//将name属性值和class属性值封装成actionMapping对象
Iterator resultIter = action.elementIterator();//获取result节点迭代器
while(resultIter.hasNext()){
Element result= resultIter.next();//获取result节点
String resultName = result.attributeValue("name");//获取result节点的name属性值
String resultPath = result.getText();//获取result节点的文本节点值
ResultMapping resultMapping = new ResultMapping(resultName,resultPath);//将Result节点信息封装成ResultMapping对象
actionMapping.getResultsList().add(resultMapping);//将resultMapping对象添加到actionMapping的集合中
}//将action的节点信息添加到actionsMap中
actionsMap.put(actionName, actionMapping);
}
}catch(DocumentException e) {
e.printStackTrace();
}
}/*** 根据action的name值查找action节点信息
*@paramactionName
*@return
*/
publicActionMapping getActionByName(String actionName){returnactionsMap.get(actionName);
}public static voidmain(String[] args) {
ActionMappingManager actionMappingManager= newActionMappingManager();
actionMappingManager.paserXml();//解析配置文件
ActionMapping actionMapping = actionMappingManager.getActionByName("login");
String actionName=actionMapping.getActionName();
String actionClass=actionMapping.getActionClass();
System.out.println(actionName+"----"+actionClass);
List list =actionMapping.getResultsList();for(ResultMapping resultMapping : list) {
String resultName=resultMapping.getResultName();
String resultPath=resultMapping.getResultPath();
System.out.println(resultName+"****"+resultPath);
}
}
}