From e1edf4b35090ecc8408fa0600c5f9f3db2f12b7d Mon Sep 17 00:00:00 2001 From: xxp17457741 <17457741@qq.com> Date: Sun, 19 Mar 2017 15:32:52 +0800 Subject: [PATCH 1/2] 17457741 --- .../17457741/src/secondwork/ArrayUtil.java | 157 ++++++++++++++++++ .../src/secondwork/ArrayUtilTest.java | 52 ++++++ .../17457741/src/secondwork/LoginAction.java | 38 +++++ group22/17457741/src/secondwork/Struts.java | 69 ++++++++ .../17457741/src/secondwork/StrutsAction.java | 24 +++ .../17457741/src/secondwork/StrutsParser.java | 77 +++++++++ .../17457741/src/secondwork/TestStrust.java | 40 +++++ group22/17457741/src/secondwork/View.java | 26 +++ group22/17457741/src/secondwork/adress2.txt | 1 + group22/17457741/src/secondwork/struts.xml | 11 ++ 10 files changed, 495 insertions(+) create mode 100644 group22/17457741/src/secondwork/ArrayUtil.java create mode 100644 group22/17457741/src/secondwork/ArrayUtilTest.java create mode 100644 group22/17457741/src/secondwork/LoginAction.java create mode 100644 group22/17457741/src/secondwork/Struts.java create mode 100644 group22/17457741/src/secondwork/StrutsAction.java create mode 100644 group22/17457741/src/secondwork/StrutsParser.java create mode 100644 group22/17457741/src/secondwork/TestStrust.java create mode 100644 group22/17457741/src/secondwork/View.java create mode 100644 group22/17457741/src/secondwork/adress2.txt create mode 100644 group22/17457741/src/secondwork/struts.xml diff --git a/group22/17457741/src/secondwork/ArrayUtil.java b/group22/17457741/src/secondwork/ArrayUtil.java new file mode 100644 index 0000000000..29f1bf31c8 --- /dev/null +++ b/group22/17457741/src/secondwork/ArrayUtil.java @@ -0,0 +1,157 @@ +package secondwork; + + +import java.util.Arrays; + +import org.junit.Test; + +public class ArrayUtil { + public void reverseArray (int [] origin){ + int le =origin.length; + int []changedArray=Arrays.copyOf(origin, le); + for (int i=0;i parameters) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException, NoSuchMethodException, SecurityException { + Map actionMap = StrutsParser.doParse(); + StrutsAction action = actionMap.get(actionName); + + if (action == null) { + System.out.println("couldn't get action: " + actionName + ", return"); + return null; + } + + try { + // 通过反射, 创建实例对象 + Class actionClass = Class.forName(action.getActionClassName()); + Object actionObj = actionClass.newInstance(); + + // 调用 parameters 中的 set 方法 + for (Map.Entry parameterEntry : parameters.entrySet()) { + Method[] methods = actionClass.getMethods(); + for (Method method : methods) { + if (method.getName().equalsIgnoreCase("set" + parameterEntry.getKey())) { + method.invoke(actionObj, parameterEntry.getValue()); + } + } + } + + Method executeMethod = actionClass.getMethod("execute"); + Object executeResult = executeMethod.invoke(actionObj); + + // 根据 execute 方法的结果, 获取 xml 配置的 jsp 页面 + String jsp = action.getAttributes().get(Objects.toString(executeResult)); + + + Map actionFieldMap = new HashMap<>(); + Field[] actionFields = actionClass.getDeclaredFields(); + for (Field actionFiled : actionFields) { + Method[] methods = actionClass.getMethods(); + for (Method method : methods) { + if (method.getName().equalsIgnoreCase("get" + actionFiled.getName())) { + method.invoke(actionObj); + actionFieldMap.put(actionFiled.getName(), Objects.toString(method.invoke(actionObj))); + } + } + } + + View view = new View(); + view.setParameters(actionFieldMap); + view.setJsp(jsp); + return view; + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/group22/17457741/src/secondwork/StrutsAction.java b/group22/17457741/src/secondwork/StrutsAction.java new file mode 100644 index 0000000000..fe30f54363 --- /dev/null +++ b/group22/17457741/src/secondwork/StrutsAction.java @@ -0,0 +1,24 @@ +package secondwork; + +import java.util.Map; + +public class StrutsAction { + private String actionClassName; + private Map attributes; + + public String getActionClassName() { + return actionClassName; + } + + public void setActionClassName(String actionClassName) { + this.actionClassName = actionClassName; + } + + public Map getAttributes() { + return attributes; + } + + public void setAttributes(Map attributes) { + this.attributes = attributes; + } +} diff --git a/group22/17457741/src/secondwork/StrutsParser.java b/group22/17457741/src/secondwork/StrutsParser.java new file mode 100644 index 0000000000..c3342872f7 --- /dev/null +++ b/group22/17457741/src/secondwork/StrutsParser.java @@ -0,0 +1,77 @@ +package secondwork; + +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.xml.bind.Element; + +import com.sun.xml.internal.txw2.Document; + + + +public class StrutsParser { + + private static final String STRUTS_XML = "struts.xml"; + + public static void main(String[] args) { + Map strutsActions = doParse(); + System.out.println(strutsActions.size()); + } + + public static Map doParse() { + Map resultMap = new HashMap<>(); + + SAXReader reader = new SAXReader(); + InputStream in = getStrutsInputStream(); + try { + Document document = reader.read(in); + Element rootElement = document.getRootElement(); + + + List elementActions = rootElement.elements(); + for (Element elementAction : elementActions) { + StrutsAction action = new StrutsAction(); + + + resultMap.put(elementAction.attribute("name").getValue(), action); + + // parse "class" attribute from action element + action.setActionClassName(elementAction.attribute("class").getValue()); + + // parse sub elements in action element + List elements = elementAction.elements(); + Map map = new HashMap<>(); + for (Element element : elements) { + map.put(element.attribute("name").getValue(), element.getStringValue()); + } + action.setAttributes(map); + } + + return resultMap; + } catch (DocumentException e) { + throw new IllegalStateException("failed to parse " + STRUTS_XML, e); + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + private static InputStream getStrutsInputStream() { + StrutsParser.class.getPackage().getName(); + InputStream in = StrutsParser.class.getClassLoader() + .getResourceAsStream("org/korben/coderising/litestruts/util/" + STRUTS_XML); + if (in == null) { + throw new IllegalStateException(STRUTS_XML + " doesn't exist"); + } + + return in; + } +} diff --git a/group22/17457741/src/secondwork/TestStrust.java b/group22/17457741/src/secondwork/TestStrust.java new file mode 100644 index 0000000000..6cf4e3da8e --- /dev/null +++ b/group22/17457741/src/secondwork/TestStrust.java @@ -0,0 +1,40 @@ +package secondwork; + +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Test; + + + +public class TestStrust { + @Test + public void testLoginActionSuccess() { + + String actionName = "login"; + + Map params = new HashMap(); + params.put("name", "test"); + params.put("password", "1234"); + + View view = Struts.runAction(actionName, params); + + Assert.assertEquals("/jsp/homepage.jsp", view.getJsp()); + Assert.assertEquals("login successful", view.getParameters().get("message")); + } + + @Test + public void testLoginActionFailed() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException, NoSuchMethodException, SecurityException { + String actionName = "login"; + Map params = new HashMap(); + params.put("name", "test"); + params.put("password", "123456"); //密码和预设的不一致 + + View view = Struts.runAction(actionName, params); + + Assert.assertEquals("/jsp/showLogin.jsp", view.getJsp()); + Assert.assertEquals("login failed,please check your user/pwd", view.getParameters().get("message")); + } +} diff --git a/group22/17457741/src/secondwork/View.java b/group22/17457741/src/secondwork/View.java new file mode 100644 index 0000000000..44e4754edb --- /dev/null +++ b/group22/17457741/src/secondwork/View.java @@ -0,0 +1,26 @@ +package secondwork; + +import java.util.Map; + +public class View { + private String jsp; + private Map parameters; + + public String getJsp() { + return jsp; + } + + public View setJsp(String jsp) { + this.jsp = jsp; + return this; + } + + public Map getParameters() { + return parameters; + } + + public View setParameters(Map parameters) { + this.parameters = parameters; + return this; + } +} diff --git a/group22/17457741/src/secondwork/adress2.txt b/group22/17457741/src/secondwork/adress2.txt new file mode 100644 index 0000000000..b728064ab8 --- /dev/null +++ b/group22/17457741/src/secondwork/adress2.txt @@ -0,0 +1 @@ +http://www.cnblogs.com/xxp17457741/p/6568230.html \ No newline at end of file diff --git a/group22/17457741/src/secondwork/struts.xml b/group22/17457741/src/secondwork/struts.xml new file mode 100644 index 0000000000..9c2574460d --- /dev/null +++ b/group22/17457741/src/secondwork/struts.xml @@ -0,0 +1,11 @@ + + + + /jsp/homepage.jsp + /jsp/showLogin.jsp + + + /jsp/welcome.jsp + /jsp/error.jsp + + \ No newline at end of file From e449df73fdb1f1d412c1a5c72002055f3caccebf Mon Sep 17 00:00:00 2001 From: xxp17457741 <17457741@qq.com> Date: Sun, 19 Mar 2017 15:33:13 +0800 Subject: [PATCH 2/2] 17457741 --- group22/17457741/src/adress2.txt | 1 + group22/17457741/src/secondwork/TestStrust.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 group22/17457741/src/adress2.txt diff --git a/group22/17457741/src/adress2.txt b/group22/17457741/src/adress2.txt new file mode 100644 index 0000000000..b728064ab8 --- /dev/null +++ b/group22/17457741/src/adress2.txt @@ -0,0 +1 @@ +http://www.cnblogs.com/xxp17457741/p/6568230.html \ No newline at end of file diff --git a/group22/17457741/src/secondwork/TestStrust.java b/group22/17457741/src/secondwork/TestStrust.java index 6cf4e3da8e..7629899c2b 100644 --- a/group22/17457741/src/secondwork/TestStrust.java +++ b/group22/17457741/src/secondwork/TestStrust.java @@ -11,7 +11,7 @@ public class TestStrust { @Test - public void testLoginActionSuccess() { + public void testLoginActionSuccess() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException, NoSuchMethodException, SecurityException { String actionName = "login";