package week2.struts; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File; import java.util.List; public class Struts { public static void main(String[] args) { runAction(); } public static void runAction() { /* 0. 读取配置文件struts.xml 1. 根据actionName找到相对应的class , 例如LoginAction, 通过反射实例化(创建对象) 据parameters中的数据,调用对象的setter方法, 例如parameters中的数据是 ("name"="test" , "password"="1234") , 那就应该调用 setName和setPassword方法 2. 通过反射调用对象的exectue 方法, 并获得返回值,例如"success" - 3. 通过反射找到对象的所有getter方法(例如 getMessage), 通过反射来调用, 把值和属性形成一个HashMap , 例如 {"message": "登录成功"} , 放到View对象的parameters 4. 根据struts.xml中的 <result> 配置,以及execute的返回值, 确定哪一个jsp, 放到View对象的jsp字段中。 */ File file = new File("src/week2/struts/struts.xml"); SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(file); Element rootElement = document.getRootElement(); // List<Element> elements = rootElement.elements("action"); // for (Element element : elements) { // String aClass = element.attributeValue("class"); // Class firstClass = Class.forName(aClass); // Object obj = firstClass.newInstance(); // Method setName = firstClass.getMethod("setName",String.class); // Method setPassWord = firstClass.getMethod("setPassword",String.class); // Method execute = firstClass.getMethod("execute"); // setName.invoke(obj , "test"); // setPassWord.invoke(obj , "1234"); // String result = (String) execute.invoke(obj); // System.out.println(result); // } //根节点的子节点 List<Element> elements = rootElement.elements(); for(Element element : elements) { //节点的属性 List<Attribute> attributes = element.attributes(); List<Element> list = element.elements(); for(Element e : list) { if(e.attributeValue("name").equals("success")) { String jsp = e.getTextTrim(); } } } } catch (Exception e) { e.printStackTrace(); } } }