package TestCollection; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.List; 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 Struts { public static View runAction(String actionName, Map<String,String> parameters) { View view = new View(); /* 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 �ŵ�View�����jsp�ֶ��С� */ SAXReader reader = new SAXReader(); Document document = null; try { document = reader.read("src/struts.xml"); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } Element root= document.getRootElement(); List<Element> list = root.elements("action"); String className = null; Element newElement = null; for (Element element : list) { if(element.attribute("name").getValue().equals(actionName)){ Attribute attribute = element.attribute("class"); newElement = element; className = attribute.getValue(); } } Class clazz = null; try { clazz = Class.forName(className); Object obj = clazz.newInstance(); for (String key : parameters.keySet()) { Method[] methods = clazz.getMethods(); for (Method method : methods) { if(method.getName().toLowerCase().equals(("set"+key).toLowerCase())){ method.invoke(obj,parameters.get(key)); } } } String value = (String) clazz.getMethod("execute").invoke(obj); List<Element> elements = newElement.elements(); String message = ""; String jsp = ""; for (Element element : elements) { if(element.attribute("name").getValue().equals(value)){ jsp = element.getText(); } } if("success".equals(value)){ message = "login successful"; }else if("fail".equals(value)){ message = "login failed,please check your user/pwd"; } view.setJsp(jsp); Map<String,String> p = new HashMap<String, String>(); p.put("message",message); view.setParameters(p); return view; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } return view; } }