diff --git a/group12/382266293/.classpath b/group12/382266293/.classpath
index 97b7b051d0..300ed0c62f 100644
--- a/group12/382266293/.classpath
+++ b/group12/382266293/.classpath
@@ -5,5 +5,6 @@
+
diff --git a/group12/382266293/coding/basic/Collection/AbstractList.java b/group12/382266293/coding/basic/collection/AbstractList.java
similarity index 97%
rename from group12/382266293/coding/basic/Collection/AbstractList.java
rename to group12/382266293/coding/basic/collection/AbstractList.java
index a81e76b587..93da57e1bd 100644
--- a/group12/382266293/coding/basic/Collection/AbstractList.java
+++ b/group12/382266293/coding/basic/collection/AbstractList.java
@@ -1,4 +1,4 @@
-package Collection;
+package collection;
public abstract class AbstractList implements List {
diff --git a/group12/382266293/coding/basic/Collection/Iterator.java b/group12/382266293/coding/basic/collection/Iterator.java
similarity index 80%
rename from group12/382266293/coding/basic/Collection/Iterator.java
rename to group12/382266293/coding/basic/collection/Iterator.java
index d51656a3a8..79955745cd 100644
--- a/group12/382266293/coding/basic/Collection/Iterator.java
+++ b/group12/382266293/coding/basic/collection/Iterator.java
@@ -1,4 +1,4 @@
-package Collection;
+package collection;
public interface Iterator {
diff --git a/group12/382266293/coding/basic/Collection/List.java b/group12/382266293/coding/basic/collection/List.java
similarity index 89%
rename from group12/382266293/coding/basic/Collection/List.java
rename to group12/382266293/coding/basic/collection/List.java
index 7ddb685cac..5fdc0de9ab 100644
--- a/group12/382266293/coding/basic/Collection/List.java
+++ b/group12/382266293/coding/basic/collection/List.java
@@ -1,4 +1,4 @@
-package Collection;
+package collection;
public interface List {
diff --git a/group12/382266293/coding/basic/Collection/Concrete/ArrayList.java b/group12/382266293/coding/basic/collection/concrete/ArrayList.java
similarity index 96%
rename from group12/382266293/coding/basic/Collection/Concrete/ArrayList.java
rename to group12/382266293/coding/basic/collection/concrete/ArrayList.java
index 3db5ab47e6..449cdf4e1a 100644
--- a/group12/382266293/coding/basic/Collection/Concrete/ArrayList.java
+++ b/group12/382266293/coding/basic/collection/concrete/ArrayList.java
@@ -1,10 +1,10 @@
-package Collection.Concrete;
+package collection.concrete;
import java.util.Arrays;
import java.util.NoSuchElementException;
-import Collection.AbstractList;
-import Collection.Iterator;
+import collection.AbstractList;
+import collection.Iterator;
public class ArrayList extends AbstractList {
diff --git a/group12/382266293/coding/basic/Collection/Concrete/BinaryTreeNode.java b/group12/382266293/coding/basic/collection/concrete/BinaryTreeNode.java
similarity index 98%
rename from group12/382266293/coding/basic/Collection/Concrete/BinaryTreeNode.java
rename to group12/382266293/coding/basic/collection/concrete/BinaryTreeNode.java
index 34a9d4253e..442b06b1c9 100644
--- a/group12/382266293/coding/basic/Collection/Concrete/BinaryTreeNode.java
+++ b/group12/382266293/coding/basic/collection/concrete/BinaryTreeNode.java
@@ -1,4 +1,4 @@
-package Collection.Concrete;
+package collection.concrete;
public class BinaryTreeNode> {
diff --git a/group12/382266293/coding/basic/Collection/Concrete/LinkedList.java b/group12/382266293/coding/basic/collection/concrete/LinkedList.java
similarity index 86%
rename from group12/382266293/coding/basic/Collection/Concrete/LinkedList.java
rename to group12/382266293/coding/basic/collection/concrete/LinkedList.java
index 66dbd9d8d0..cb3d87684d 100644
--- a/group12/382266293/coding/basic/Collection/Concrete/LinkedList.java
+++ b/group12/382266293/coding/basic/collection/concrete/LinkedList.java
@@ -1,8 +1,9 @@
-package Collection.Concrete;
+package collection.concrete;
import java.util.NoSuchElementException;
-import Collection.AbstractList;
-import Collection.Iterator;
+
+import collection.AbstractList;
+import collection.Iterator;
public class LinkedList extends AbstractList {
@@ -87,18 +88,28 @@ public E removeLast(){
return remove(size-1);
}
+ @SuppressWarnings("unchecked")
public E remove(int index) {
checkIndex(index);
- Node pNode = getNode(index);
+ Node pNode = null;
+ E data = null;
if (index == 0) {
+ data = (E) head.data;
head = head.next;
- } else if (index == size-1 ) {
- getNode(index-1).next = null;
+ } else if (index == size-1) {
+ pNode = getNode(index - 1);
+ data = (E) pNode.next.data;
+ pNode.next = null;
} else {
- getNode(index-1).next = getNode(index+1);
+ pNode = head;
+ for ( int i = 0; i < index - 1 ; i++) {
+ pNode = pNode.next;
+ }
+ data = (E) pNode.next.data;
+ pNode.next =pNode.next.next;
}
size--;
- return pNode.data;
+ return data;
}
@Override
diff --git a/group12/382266293/coding/basic/Collection/Concrete/Queue.java b/group12/382266293/coding/basic/collection/concrete/Queue.java
similarity index 93%
rename from group12/382266293/coding/basic/Collection/Concrete/Queue.java
rename to group12/382266293/coding/basic/collection/concrete/Queue.java
index 300fb633af..0875d8286a 100644
--- a/group12/382266293/coding/basic/Collection/Concrete/Queue.java
+++ b/group12/382266293/coding/basic/collection/concrete/Queue.java
@@ -1,8 +1,8 @@
-package Collection.Concrete;
+package collection.concrete;
import java.util.NoSuchElementException;
-import Collection.AbstractList;
-import Collection.Iterator;
+import collection.AbstractList;
+import collection.Iterator;
public class Queue extends AbstractList {
diff --git a/group12/382266293/coding/basic/Collection/Concrete/Stack.java b/group12/382266293/coding/basic/collection/concrete/Stack.java
similarity index 95%
rename from group12/382266293/coding/basic/Collection/Concrete/Stack.java
rename to group12/382266293/coding/basic/collection/concrete/Stack.java
index 17ec4364fa..ecc0994273 100644
--- a/group12/382266293/coding/basic/Collection/Concrete/Stack.java
+++ b/group12/382266293/coding/basic/collection/concrete/Stack.java
@@ -1,10 +1,10 @@
-package Collection.Concrete;
+package collection.concrete;
import java.util.EmptyStackException;
import java.util.NoSuchElementException;
-import Collection.AbstractList;
-import Collection.Iterator;
+import collection.AbstractList;
+import collection.Iterator;
public class Stack extends AbstractList {
diff --git a/group12/382266293/coding/basic/TestCollection/AllTests.java b/group12/382266293/coding/basic/test/collection/AllTests.java
similarity index 91%
rename from group12/382266293/coding/basic/TestCollection/AllTests.java
rename to group12/382266293/coding/basic/test/collection/AllTests.java
index cd4eeadb58..661d6c3722 100644
--- a/group12/382266293/coding/basic/TestCollection/AllTests.java
+++ b/group12/382266293/coding/basic/test/collection/AllTests.java
@@ -1,4 +1,4 @@
-package TestCollection;
+package test.collection;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
diff --git a/group12/382266293/coding/basic/TestCollection/ArrayListTest.java b/group12/382266293/coding/basic/test/collection/ArrayListTest.java
similarity index 96%
rename from group12/382266293/coding/basic/TestCollection/ArrayListTest.java
rename to group12/382266293/coding/basic/test/collection/ArrayListTest.java
index f29580616f..74a3a14212 100644
--- a/group12/382266293/coding/basic/TestCollection/ArrayListTest.java
+++ b/group12/382266293/coding/basic/test/collection/ArrayListTest.java
@@ -1,4 +1,4 @@
-package TestCollection;
+package test.collection;
import static util.Print.*;
import static util.TestUtil.*;
@@ -10,10 +10,9 @@
import org.junit.Before;
import org.junit.Test;
-
-import Collection.Iterator;
-import Collection.List;
-import Collection.Concrete.ArrayList;
+import collection.Iterator;
+import collection.List;
+import collection.concrete.ArrayList;
import junit.framework.TestCase;
public class ArrayListTest extends TestCase {
diff --git a/group12/382266293/coding/basic/TestCollection/BinaryTreeNodeTest.java b/group12/382266293/coding/basic/test/collection/BinaryTreeNodeTest.java
similarity index 93%
rename from group12/382266293/coding/basic/TestCollection/BinaryTreeNodeTest.java
rename to group12/382266293/coding/basic/test/collection/BinaryTreeNodeTest.java
index 275ef59484..161d29298a 100644
--- a/group12/382266293/coding/basic/TestCollection/BinaryTreeNodeTest.java
+++ b/group12/382266293/coding/basic/test/collection/BinaryTreeNodeTest.java
@@ -1,4 +1,4 @@
-package TestCollection;
+package test.collection;
import static util.Print.*;
import java.util.Random;
@@ -9,7 +9,7 @@
import org.junit.Before;
import org.junit.Test;
-import Collection.Concrete.BinaryTreeNode;
+import collection.concrete.BinaryTreeNode;
import junit.framework.TestCase;
public class BinaryTreeNodeTest extends TestCase {
diff --git a/group12/382266293/coding/basic/TestCollection/LinkedListTest.java b/group12/382266293/coding/basic/test/collection/LinkedListTest.java
similarity index 96%
rename from group12/382266293/coding/basic/TestCollection/LinkedListTest.java
rename to group12/382266293/coding/basic/test/collection/LinkedListTest.java
index 8b9fad15eb..5a2d7213af 100644
--- a/group12/382266293/coding/basic/TestCollection/LinkedListTest.java
+++ b/group12/382266293/coding/basic/test/collection/LinkedListTest.java
@@ -1,4 +1,4 @@
-package TestCollection;
+package test.collection;
import static util.Print.*;
import static util.TestUtil.*;
@@ -8,9 +8,9 @@
import org.junit.Before;
import org.junit.Test;
-import Collection.Iterator;
-import Collection.List;
-import Collection.Concrete.LinkedList;
+import collection.Iterator;
+import collection.List;
+import collection.concrete.LinkedList;
import junit.framework.TestCase;
@@ -182,7 +182,9 @@ public void testRemove() {
assertEquals(i, myLL.size());
assertEquals(a,res);
}
+
}
+
@Test
public void testSize() {
diff --git a/group12/382266293/coding/basic/TestCollection/QueueTest.java b/group12/382266293/coding/basic/test/collection/QueueTest.java
similarity index 96%
rename from group12/382266293/coding/basic/TestCollection/QueueTest.java
rename to group12/382266293/coding/basic/test/collection/QueueTest.java
index 01a9aa31f2..bbbd076f7d 100644
--- a/group12/382266293/coding/basic/TestCollection/QueueTest.java
+++ b/group12/382266293/coding/basic/test/collection/QueueTest.java
@@ -1,11 +1,14 @@
-package TestCollection;
+package test.collection;
import static util.Print.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+
+import collection.concrete.Queue;
+
import static util.TestUtil.*;
-import Collection.Concrete.Queue;
+
import junit.framework.TestCase;
public class QueueTest extends TestCase {
diff --git a/group12/382266293/coding/basic/TestCollection/StackTest.java b/group12/382266293/coding/basic/test/collection/StackTest.java
similarity index 97%
rename from group12/382266293/coding/basic/TestCollection/StackTest.java
rename to group12/382266293/coding/basic/test/collection/StackTest.java
index 8d2f85e1bf..d64b3e60f3 100644
--- a/group12/382266293/coding/basic/TestCollection/StackTest.java
+++ b/group12/382266293/coding/basic/test/collection/StackTest.java
@@ -1,4 +1,4 @@
-package TestCollection;
+package test.collection;
import static util.Print.*;
@@ -8,7 +8,7 @@
import org.junit.Before;
import org.junit.Test;
-import Collection.Concrete.Stack;
+import collection.concrete.Stack;
import junit.framework.TestCase;
public class StackTest extends TestCase {
diff --git a/group12/382266293/coding/basic/util/ActionXMLreader.java b/group12/382266293/coding/basic/util/ActionXMLreader.java
new file mode 100644
index 0000000000..8f6e0eb497
--- /dev/null
+++ b/group12/382266293/coding/basic/util/ActionXMLreader.java
@@ -0,0 +1,53 @@
+package util;
+
+import java.util.List;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.io.SAXReader;
+
+import static util.Print.*;
+
+public class ActionXMLreader {
+
+ public Node getRootNode(String add) {
+ SAXReader reader = new SAXReader();
+ Document document = null;
+ Node root = null;
+ try {
+ document = reader.read(add);
+ root = document.getRootElement();
+ } catch (DocumentException e) {
+ e.printStackTrace();
+ }
+ return root;
+ }
+
+ public String parseClass(Node root, String attr) {
+
+ @SuppressWarnings("rawtypes")
+ List list = root.selectNodes("action[@name='" + attr + "']");
+ String clazz = null;
+ for(Object o:list){
+ Element e = (Element) o;
+ clazz = e.attributeValue("class");
+ }
+ return clazz;
+ }
+
+ public String parseResult(Node root, String attr, String result) {
+
+ @SuppressWarnings("rawtypes")
+ List list = root.selectNodes("action[@name='" + attr + "']/result[@name='" + result + "']");
+
+ String jsp = null;
+ for(Object o:list){
+ Element e = (Element) o;
+ jsp = e.getTextTrim();
+ }
+ return jsp;
+ }
+
+
+}
diff --git a/group12/382266293/coding/basic/util/Print.java b/group12/382266293/coding/basic/util/Print.java
index 81b5cf539e..403339f9aa 100644
--- a/group12/382266293/coding/basic/util/Print.java
+++ b/group12/382266293/coding/basic/util/Print.java
@@ -12,7 +12,7 @@ public static void println(Object o){
System.out.println(o);
}
- public static void printArr(int[] arr) {
+ public static void printArr(Object[] arr) {
println(Arrays.toString(arr));
}
diff --git a/group12/382266293/coding/basic/util/TestUtil.java b/group12/382266293/coding/basic/util/TestUtil.java
index 0820e0e684..009e67ca26 100644
--- a/group12/382266293/coding/basic/util/TestUtil.java
+++ b/group12/382266293/coding/basic/util/TestUtil.java
@@ -3,10 +3,10 @@
import java.util.Arrays;
import java.util.Random;
-import Collection.List;
-import Collection.Concrete.ArrayList;
-import Collection.Concrete.LinkedList;
-import Collection.Concrete.Queue;
+import collection.List;
+import collection.concrete.ArrayList;
+import collection.concrete.LinkedList;
+import collection.concrete.Queue;
import junit.framework.TestCase;
diff --git a/group12/382266293/lib/.gitignore b/group12/382266293/lib/.gitignore
index 3d08860a86..edf7850106 100644
--- a/group12/382266293/lib/.gitignore
+++ b/group12/382266293/lib/.gitignore
@@ -1 +1,3 @@
/dom4j-1.6.1.zip
+/jaxen-1.1-beta-6.jar
+/dom4j-1.6.1.jar
diff --git a/group12/382266293/src/TestDom4J.java b/group12/382266293/src/TestDom4J.java
deleted file mode 100644
index b5dabfcc0c..0000000000
--- a/group12/382266293/src/TestDom4J.java
+++ /dev/null
@@ -1,59 +0,0 @@
-import java.net.URL;
-import java.util.Iterator;
-import java.util.List;
-
-import org.dom4j.Attribute;
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.dom4j.Node;
-import org.dom4j.io.SAXReader;
-
-import static util.Print.*;
-
-public class TestDom4J {
-
- public Document parse(String add) throws DocumentException {
- SAXReader reader = new SAXReader();
- Document document = reader.read(add);
- return document;
- }
-
-
-
- public void bar(Document document) {
- List list = document.selectNodes( "/struts-config/action-mappings/action" );
- Node node = document.selectSingleNode( "/struts-config/action-mappings/action/forward" );
-
- String name = node.valueOf( "@name" );
- println(name);
- }
-
- public void listNodes(Element node){
- System.out.println("当前节点的名称:" + node.getName());
- //首先获取当前节点的所有属性节点
- List list = node.attributes();
- //遍历属性节点
- for(Attribute attribute : list){
- System.out.println("属性"+attribute.getName() +":" + attribute.getValue());
- }
- //如果当前节点内容不为空,则输出
- if(!(node.getTextTrim().equals(""))){
- System.out.println( node.getName() + ":" + node.getText());
- }
- //同时迭代当前节点下面的所有子节点
- //使用递归
- Iterator iterator = node.elementIterator();
- while(iterator.hasNext()){
- Element e = iterator.next();
- listNodes(e);
- }
- }
-
- public static void main(String args[]) throws DocumentException {
-
-
-
- }
-
-}
diff --git a/group12/382266293/src/array/ArrayUtil.java b/group12/382266293/src/array/ArrayUtil.java
index f33f64150b..85df44e987 100644
--- a/group12/382266293/src/array/ArrayUtil.java
+++ b/group12/382266293/src/array/ArrayUtil.java
@@ -3,8 +3,9 @@
import static util.Print.*;
import java.util.Arrays;
import java.util.BitSet;
-import Collection.Iterator;
-import Collection.Concrete.ArrayList;
+
+import collection.Iterator;
+import collection.concrete.ArrayList;
diff --git a/group12/382266293/src/litestruts/LoginAction.java b/group12/382266293/src/com/coderising/action/LoginAction.java
similarity index 92%
rename from group12/382266293/src/litestruts/LoginAction.java
rename to group12/382266293/src/com/coderising/action/LoginAction.java
index c37c250014..b1224eb80d 100644
--- a/group12/382266293/src/litestruts/LoginAction.java
+++ b/group12/382266293/src/com/coderising/action/LoginAction.java
@@ -1,4 +1,4 @@
-package litestruts;
+package com.coderising.action;
/**
* 这是一个用来展示登录的业务类, 其中的用户名和密码都是硬编码的。
diff --git a/group12/382266293/src/litestruts/Struts.java b/group12/382266293/src/litestruts/Struts.java
index f26fa8d8b7..cb7593c657 100644
--- a/group12/382266293/src/litestruts/Struts.java
+++ b/group12/382266293/src/litestruts/Struts.java
@@ -1,34 +1,116 @@
package litestruts;
+import util.ActionXMLreader;
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.MethodDescriptor;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
import java.util.Map;
-
-
+import org.dom4j.Node;
+import static util.Print.*;
public class Struts {
- public static View runAction(String actionName, Map parameters) {
+ private static Object actionObj = null;
+ private static String address = "src/litestruts/struts.xml";
+ private static ActionXMLreader reader = new ActionXMLreader();
+
+ @SuppressWarnings("unchecked")
+ 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"
+ Node root = reader.getRootNode(address);
+ String clazz = reader.parseClass(root, actionName);
+ actionObj = getObj(clazz);
+ BeanInfo bi = getBeanInfo(actionObj);
+ PropertyDescriptor[] pd = bi.getPropertyDescriptors();
+
+ setParameters(actionObj, pd, parameters);
+ String executeResult = (String) getResult(actionObj, bi, "execute");
+ String jsp = reader.parseResult(root, actionName, executeResult);
+ Map readParamters = getReadParameters(actionObj, pd);
+
+ View view = new View();
+ view.setJsp(jsp);
+ view.setParameters(readParamters);
- 3. 通过反射找到对象的所有getter方法(例如 getMessage),
- 通过反射来调用, 把值和属性形成一个HashMap , 例如 {"message": "登录成功"} ,
- 放到View对象的parameters
+ return view;
+ }
+
+
+ private static Object getObj(String clazz) {
+ @SuppressWarnings("rawtypes")
+ Class cls = null;
+
+ try {
+ cls = Class.forName(clazz);
+ return cls.newInstance();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }catch (InstantiationException | IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+
+ private static BeanInfo getBeanInfo(Object obj) {
- 4. 根据struts.xml中的 配置,以及execute的返回值, 确定哪一个jsp,
- 放到View对象的jsp字段中。
-
- */
+ BeanInfo bi = null;
+ try {
+ bi = Introspector.getBeanInfo(obj.getClass(), Object.class);
+ } catch (IntrospectionException e) {
+ e.printStackTrace();
+ }
+ return bi;
+ }
+
+ private static void setParameters(Object obj, PropertyDescriptor[] pd ,Map parameters) {
- return null;
- }
+ for (int i = 0; i < pd.length; i++) {
+ String name = pd[i].getName();
+ if(parameters.containsKey(name))
+ try {
+ pd[i].getWriteMethod().invoke(obj,parameters.get(name));
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private static String getResult(Object obj, BeanInfo bi,String execute) {
+ MethodDescriptor[] methods = bi.getMethodDescriptors();
+ for (int i = 0; i < methods.length; i++) {
+ String methodName = methods[i].getName();
+ if(methodName.equals(execute))
+ try {
+ return (String) methods[i].getMethod().invoke(actionObj);
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ }
+ return null;
+ }
+
+ @SuppressWarnings("rawtypes")
+ public static Map getReadParameters (Object obj, PropertyDescriptor[] pd) {
+
+ Map viewParams = new HashMap();
+
+ for (int i = 0; i < pd.length; i++) {
+ String readMethod = pd[i].getReadMethod().getName().substring(3);
+ String value = null;
+ try {
+ value = (String) pd[i].getReadMethod().invoke(obj);
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ viewParams.put(readMethod.toLowerCase(), value);
+ }
+ return viewParams;
+ }
+
}
\ No newline at end of file
diff --git a/group12/382266293/src/litestruts/StrutsTest.java b/group12/382266293/src/litestruts/StrutsTest.java
index e08fab55c9..35686c8e30 100644
--- a/group12/382266293/src/litestruts/StrutsTest.java
+++ b/group12/382266293/src/litestruts/StrutsTest.java
@@ -1,19 +1,17 @@
package litestruts;
+import java.beans.IntrospectionException;
+import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import org.junit.Assert;
import org.junit.Test;
-
-
-
-
public class StrutsTest {
@Test
- public void testLoginActionSuccess() {
+ public void testLoginActionSuccess() throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IntrospectionException {
String actionName = "login";
@@ -29,7 +27,7 @@ public void testLoginActionSuccess() {
}
@Test
- public void testLoginActionFailed() {
+ public void testLoginActionFailed() throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IntrospectionException {
String actionName = "login";
Map params = new HashMap();
params.put("name","test");
diff --git a/group12/382266293/src/litestruts/struts.xml b/group12/382266293/src/litestruts/struts.xml
index 99063bcb0c..fb0c2be3de 100644
--- a/group12/382266293/src/litestruts/struts.xml
+++ b/group12/382266293/src/litestruts/struts.xml
@@ -5,7 +5,7 @@
/jsp/showLogin.jsp
- /jsp/welcome.jsp
- /jsp/error.jsp
+ /jsp/welcome.jsp
+ /jsp/error.jsp
\ No newline at end of file