From dd4e0a7d68cef5ca5a8f53fe498d6b90141d934b Mon Sep 17 00:00:00 2001 From: Fred Qin Date: Tue, 28 Feb 2017 22:12:59 -0800 Subject: [PATCH 1/3] complete array util --- .../395443277/{data_structure => }/.gitignore | 0 .../src/com/coderising/array/ArrayUtil.java | 254 ++++++++++++++++++ .../com/coderising/array/ArrayUtilTest.java | 98 +++++++ .../coderising/litestruts/LoginAction.java | 39 +++ .../src/com/coderising/litestruts/Struts.java | 34 +++ .../com/coderising/litestruts/StrutsTest.java | 43 +++ .../src/com/coderising/litestruts/View.java | 23 ++ .../src/com/coderising/litestruts/struts.xml | 11 + .../src/com/coding/basic/ArrayList.java | 0 .../src/com/coding/basic/ArrayListTest.java | 0 .../src/com/coding/basic/BinaryTreeNode.java | 0 .../com/coding/basic/BinaryTreeNodeTest.java | 0 .../src/com/coding/basic/Iterator.java | 0 .../src/com/coding/basic/LinkedList.java | 0 .../src/com/coding/basic/LinkedListTest.java | 0 .../src/com/coding/basic/List.java | 0 .../src/com/coding/basic/Queue.java | 0 .../src/com/coding/basic/QueueTest.java | 0 .../src/com/coding/basic/Stack.java | 0 .../src/com/coding/basic/StackTest.java | 0 20 files changed, 502 insertions(+) rename group11/395443277/{data_structure => }/.gitignore (100%) create mode 100644 group11/395443277/src/com/coderising/array/ArrayUtil.java create mode 100644 group11/395443277/src/com/coderising/array/ArrayUtilTest.java create mode 100644 group11/395443277/src/com/coderising/litestruts/LoginAction.java create mode 100644 group11/395443277/src/com/coderising/litestruts/Struts.java create mode 100644 group11/395443277/src/com/coderising/litestruts/StrutsTest.java create mode 100644 group11/395443277/src/com/coderising/litestruts/View.java create mode 100644 group11/395443277/src/com/coderising/litestruts/struts.xml rename group11/395443277/{data_structure => }/src/com/coding/basic/ArrayList.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/ArrayListTest.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/BinaryTreeNode.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/BinaryTreeNodeTest.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/Iterator.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/LinkedList.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/LinkedListTest.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/List.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/Queue.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/QueueTest.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/Stack.java (100%) rename group11/395443277/{data_structure => }/src/com/coding/basic/StackTest.java (100%) diff --git a/group11/395443277/data_structure/.gitignore b/group11/395443277/.gitignore similarity index 100% rename from group11/395443277/data_structure/.gitignore rename to group11/395443277/.gitignore diff --git a/group11/395443277/src/com/coderising/array/ArrayUtil.java b/group11/395443277/src/com/coderising/array/ArrayUtil.java new file mode 100644 index 0000000000..d73df85b05 --- /dev/null +++ b/group11/395443277/src/com/coderising/array/ArrayUtil.java @@ -0,0 +1,254 @@ +package com.coderising.array; + +public class ArrayUtil { + + /** + * 给定一个整形数组a , 对该数组的值进行置换 + 例如: a = [7, 9 , 30, 3] , 置换后为 [3, 30, 9,7] + 如果 a = [7, 9, 30, 3, 4] , 置换后为 [4,3, 30 , 9,7] + * @param origin + * @return + */ + public void reverseArray(int[] origin){ + int first = 0; + int last = origin.length - 1; + + while (first < last) { + int temp; + temp = origin[first]; + origin[first] = origin[last]; + origin[last] = temp; + + first++; + last--; + } + } + + /** + * 现在有如下的一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} + * 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: + * {1,3,4,5,6,6,5,4,7,6,7,5} + * @param oldArray + * @return + */ + + public int[] removeZero(int[] oldArray){ + // count how many zeros + int zeroCount = 0; + int len= oldArray.length; + + if (len==0) { + return new int[]{}; + } + + for (int i=0; i parameters) { + + /* + + 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中的 配置,以及execute的返回值, 确定哪一个jsp, + 放到View对象的jsp字段中。 + + */ + + return null; + } + +} diff --git a/group11/395443277/src/com/coderising/litestruts/StrutsTest.java b/group11/395443277/src/com/coderising/litestruts/StrutsTest.java new file mode 100644 index 0000000000..b8c81faf3c --- /dev/null +++ b/group11/395443277/src/com/coderising/litestruts/StrutsTest.java @@ -0,0 +1,43 @@ +package com.coderising.litestruts; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Test; + + + + + +public class StrutsTest { + + @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() { + 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/group11/395443277/src/com/coderising/litestruts/View.java b/group11/395443277/src/com/coderising/litestruts/View.java new file mode 100644 index 0000000000..07df2a5dab --- /dev/null +++ b/group11/395443277/src/com/coderising/litestruts/View.java @@ -0,0 +1,23 @@ +package com.coderising.litestruts; + +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/group11/395443277/src/com/coderising/litestruts/struts.xml b/group11/395443277/src/com/coderising/litestruts/struts.xml new file mode 100644 index 0000000000..4c9967dbaf --- /dev/null +++ b/group11/395443277/src/com/coderising/litestruts/struts.xml @@ -0,0 +1,11 @@ + + + + /jsp/homepage.jsp + /jsp/showLogin.jsp + + + /jsp/welcome.jsp + /jsp/error.jsp + + \ No newline at end of file diff --git a/group11/395443277/data_structure/src/com/coding/basic/ArrayList.java b/group11/395443277/src/com/coding/basic/ArrayList.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/ArrayList.java rename to group11/395443277/src/com/coding/basic/ArrayList.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/ArrayListTest.java b/group11/395443277/src/com/coding/basic/ArrayListTest.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/ArrayListTest.java rename to group11/395443277/src/com/coding/basic/ArrayListTest.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/BinaryTreeNode.java b/group11/395443277/src/com/coding/basic/BinaryTreeNode.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/BinaryTreeNode.java rename to group11/395443277/src/com/coding/basic/BinaryTreeNode.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/BinaryTreeNodeTest.java b/group11/395443277/src/com/coding/basic/BinaryTreeNodeTest.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/BinaryTreeNodeTest.java rename to group11/395443277/src/com/coding/basic/BinaryTreeNodeTest.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/Iterator.java b/group11/395443277/src/com/coding/basic/Iterator.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/Iterator.java rename to group11/395443277/src/com/coding/basic/Iterator.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/LinkedList.java b/group11/395443277/src/com/coding/basic/LinkedList.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/LinkedList.java rename to group11/395443277/src/com/coding/basic/LinkedList.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/LinkedListTest.java b/group11/395443277/src/com/coding/basic/LinkedListTest.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/LinkedListTest.java rename to group11/395443277/src/com/coding/basic/LinkedListTest.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/List.java b/group11/395443277/src/com/coding/basic/List.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/List.java rename to group11/395443277/src/com/coding/basic/List.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/Queue.java b/group11/395443277/src/com/coding/basic/Queue.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/Queue.java rename to group11/395443277/src/com/coding/basic/Queue.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/QueueTest.java b/group11/395443277/src/com/coding/basic/QueueTest.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/QueueTest.java rename to group11/395443277/src/com/coding/basic/QueueTest.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/Stack.java b/group11/395443277/src/com/coding/basic/Stack.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/Stack.java rename to group11/395443277/src/com/coding/basic/Stack.java diff --git a/group11/395443277/data_structure/src/com/coding/basic/StackTest.java b/group11/395443277/src/com/coding/basic/StackTest.java similarity index 100% rename from group11/395443277/data_structure/src/com/coding/basic/StackTest.java rename to group11/395443277/src/com/coding/basic/StackTest.java From 16f10f4759d54eb07b8e09353ba1c91b51768b81 Mon Sep 17 00:00:00 2001 From: Fred Qin Date: Wed, 1 Mar 2017 15:58:18 -0800 Subject: [PATCH 2/3] structs.xml is updated --- .../src/com/coderising/array/ArrayUtilTest.java | 2 -- .../src/com/coderising/litestruts/struts.xml | 16 ++++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/group11/395443277/src/com/coderising/array/ArrayUtilTest.java b/group11/395443277/src/com/coderising/array/ArrayUtilTest.java index 8dee13e718..704ea09591 100644 --- a/group11/395443277/src/com/coderising/array/ArrayUtilTest.java +++ b/group11/395443277/src/com/coderising/array/ArrayUtilTest.java @@ -1,7 +1,5 @@ package com.coderising.array; -import static org.junit.Assert.*; - import org.junit.Assert; import org.junit.Test; diff --git a/group11/395443277/src/com/coderising/litestruts/struts.xml b/group11/395443277/src/com/coderising/litestruts/struts.xml index 4c9967dbaf..dd598a3664 100644 --- a/group11/395443277/src/com/coderising/litestruts/struts.xml +++ b/group11/395443277/src/com/coderising/litestruts/struts.xml @@ -1,11 +1,11 @@ - - /jsp/homepage.jsp - /jsp/showLogin.jsp - - - /jsp/welcome.jsp - /jsp/error.jsp - + + /jsp/homepage.jsp + /jsp/showLogin.jsp + + + /jsp/welcome.jsp + /jsp/error.jsp + \ No newline at end of file From c801015ad111c031c2356837dcab9901c3c127c7 Mon Sep 17 00:00:00 2001 From: Fred Qin Date: Thu, 2 Mar 2017 20:39:49 -0800 Subject: [PATCH 3/3] complete Struts.java the class in struts.xml should be com.coderising.litestruts.LoginAction --- .../src/com/coderising/litestruts/Struts.java | 122 ++++++++++++++---- .../src/com/coderising/litestruts/struts.xml | 4 +- 2 files changed, 100 insertions(+), 26 deletions(-) diff --git a/group11/395443277/src/com/coderising/litestruts/Struts.java b/group11/395443277/src/com/coderising/litestruts/Struts.java index 85e2e22de3..c5d3d602fc 100644 --- a/group11/395443277/src/com/coderising/litestruts/Struts.java +++ b/group11/395443277/src/com/coderising/litestruts/Struts.java @@ -1,34 +1,108 @@ package com.coderising.litestruts; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.util.HashMap; import java.util.Map; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.NodeList; public class Struts { - public static View runAction(String actionName, Map parameters) { - - /* - - 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中的 配置,以及execute的返回值, 确定哪一个jsp, - 放到View对象的jsp字段中。 - - */ - - return null; - } + public static View runAction(String actionName, Map parameters) { + + /* + * + * 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中的 配置,以及execute的返回值, 确定哪一个jsp, + * 放到View对象的jsp字段中。 + * + */ + + // create a new DocumentBuilderFactory + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + + try { + // use the factory to create a documentbuilder + DocumentBuilder builder = factory.newDocumentBuilder(); + InputStream istream = Struts.class.getResourceAsStream("struts.xml"); + Document doc = builder.parse(istream); + + // find jsp page based on the result from execute result + Element element = doc.getDocumentElement(); + NodeList actionNodeList = element.getElementsByTagName("action"); + + for (int i = 0; i < actionNodeList.getLength(); i++) { + NamedNodeMap actionNodeAttr = actionNodeList.item(i).getAttributes(); + + if (actionNodeAttr.getNamedItem("name").getTextContent().equals(actionName)) { + String className = actionNodeAttr.getNamedItem("class").getTextContent(); + + Class cls = Class.forName(className); + Object obj = cls.newInstance(); + + // set name and password + Method setName = cls.getDeclaredMethod("setName", String.class); + Method setPassword = cls.getDeclaredMethod("setPassword", String.class); + setName.invoke(obj, parameters.get("name")); + setPassword.invoke(obj, parameters.get("password")); + + // execute + Method execute = cls.getDeclaredMethod("execute"); + String executeResult = (String) execute.invoke(obj); + + // get message and jsp + Method getMessage = cls.getDeclaredMethod("getMessage"); + String msg = (String) getMessage.invoke(obj); + Map params = new HashMap(); + params.put("message",msg); + + // check result nodes + NodeList resultNodes = actionNodeList.item(i).getChildNodes(); + + String jsp = ""; + for (int j=0; j viewCls = Class.forName("com.coderising.litestruts.View"); + View viewObj = (View) viewCls.newInstance(); + Method setParameters = viewCls.getDeclaredMethod("setParameters", Map.class); + setParameters.invoke(viewObj, params); + Method setJsp = viewCls.getDeclaredMethod("setJsp", String.class); + setJsp.invoke(viewObj, jsp); + + return viewObj; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } } diff --git a/group11/395443277/src/com/coderising/litestruts/struts.xml b/group11/395443277/src/com/coderising/litestruts/struts.xml index dd598a3664..7f8d558286 100644 --- a/group11/395443277/src/com/coderising/litestruts/struts.xml +++ b/group11/395443277/src/com/coderising/litestruts/struts.xml @@ -1,10 +1,10 @@ - + /jsp/homepage.jsp /jsp/showLogin.jsp - + /jsp/welcome.jsp /jsp/error.jsp