编码实战Web端联系人的增删改查

首先画出分析图

实现效果如图

项目下的包如图:

 

 


实体包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.contactSystem.entiey;
 
public class Contact {
    private String Id;
    private String name;
    private String sex;
    private String age;
    private String phone;
    private String qq;
    private String email;
    public String getId() {
        return Id;
    }
    public void setId(String id) {
        Id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getQq() {
        return qq;
    }
    public void setQq(String qq) {
        this.qq = qq;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "Contact [Id=" + Id + ", name=" + name + ", sex=" + sex
                + ", age=" + age + ", phone=" + phone + ", qq=" + qq
                + ", email=" + email + "]";
    }
 
}

  XML的工具包(只是避免了代码的重复使用,将其放进工具包中)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.contactSystem.util;
 
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
 
import javax.management.RuntimeErrorException;
 
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
 
/*
 * xml操作的工具类
 */
public class XMLUtil {
    //写出一个xml文件
    public static void write2xml(Document doc) throws Exception{
        OutputStream out=new FileOutputStream("e:/contact.xml");
        OutputFormat format=OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter writer=new XMLWriter(out,format);
        writer.write(doc);
        writer.close();
    }
     
    //读取本地xml文件的方法
    public static Document getDocument(){
        Document doc;
        try {
            doc = new SAXReader().read("e:/contact.xml");
            return doc;
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException(e);
        }
         
    }
     
}

  


抽象的接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.contactSystem.dao;
 
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.util.List;
 
import org.dom4j.DocumentException;
import com.contactSystem.entiey.Contact;
 
public interface ContactOperate {
    public void addContact(Contact contact) throws Exception;
    public void updateContact(Contact contact) throws Exception;
    public void removeContact(String id) throws Exception;
    public Contact findContact(String id) throws Exception;
    public List<Contact>  allContacts();
}

  具体的实现方法和操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.contactSystem.dao.daoImpl;
 
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
 
import javax.persistence.Id;
 
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
 
import com.contactSystem.dao.ContactOperate;
import com.contactSystem.entiey.Contact;
import com.contactSystem.util.XMLUtil;
 
public class Operater implements ContactOperate {
 
    @Override
    //添加联系人
    public void addContact(Contact contact) throws Exception {
        // TODO Auto-generated method stub
        File file=new File("e:/contact.xml");
        Document doc=null;
        Element rootElem=null;
        if (file.exists()) {
            doc=new SAXReader().read(file);
            rootElem=doc.getRootElement();
        }else {
            doc=DocumentHelper.createDocument();
            rootElem=doc.addElement("ContactList");
        }
         
        //开始添加个体
        Element element=rootElem.addElement("contact");
        //有系统自动生成一随机且唯一的ID,赋给联系人Id,系统提供了一个包UUID包
        String uuid=UUID.randomUUID().toString().replace("-", "");
         
        element.addAttribute("Id", uuid);
        element.addElement("姓名").setText(contact.getName());
        element.addElement("name").setText(contact.getName());
        element.addElement("sex").setText(contact.getSex());
        element.addElement("age").setText(contact.getAge());
        element.addElement("phone").setText(contact.getPhone());
        element.addElement("email").setText(contact.getEmail());
        element.addElement("qq").setText(contact.getQq());
         
        //写入到本地的xml文档中
        XMLUtil.write2xml(doc);
         
    }
 
    @Override
    public void updateContact(Contact contact) throws Exception {
        // TODO Auto-generated method stub
        //通过xpath查找对应id的联系人
        Document document=XMLUtil.getDocument();
        Element element=(Element) document.selectSingleNode("//contact[@Id='"+contact.getId()+"']");
        //根据标签改文本
        System.out.println(element);
        element.element("name").setText(contact.getName());
        element.element("age").setText(contact.getAge());
        element.element("email").setText(contact.getEmail());
        element.element("phone").setText(contact.getPhone());
        element.element("sex").setText(contact.getSex());
        element.element("qq").setText(contact.getQq());
        XMLUtil.write2xml(document);
 
    }
 
    @Override
    public void removeContact(String id) throws Exception {
        // TODO Auto-generated method stub
        //通过xpath去查找对应的contact
        Document document=XMLUtil.getDocument();
        Element element=(Element) document.selectSingleNode("//contact[@Id='"+id+"']");
        /**
         * 如果是火狐浏览器,其本身有一个bug,对于一个get请求,它会重复做两次,
         * 第一次会把一个唯一的id给删除掉,但是在第二次的时候,它会继续去删,而这个时候查找不到,会报错,会发生错误,
         * 为了解决这个bug,我们在这里验证其是否为空
         */
        if (element!=null) {
            element.detach();
            XMLUtil.write2xml(document);
        }
    }
 
    @Override
    public Contact findContact(String id) throws Exception {
        // TODO Auto-generated method stub
        Document document=XMLUtil.getDocument();
        Element e=(Element) document.selectSingleNode("//contact[@Id='"+id+"']");
         
        Contact contact=null;
        if (e!=null) {
            contact=new Contact();
            contact.setAge(e.elementText("age"));
            contact.setEmail(e.elementText("email"));
            contact.setId(e.attributeValue("id"));
            contact.setName(e.elementText("name"));
            contact.setPhone(e.elementText("phone"));
            contact.setSex(e.elementText("sex"));
            contact.setQq(e.elementText("qq"));
        }
        return contact;
    }
 
    @Override
    public List<Contact> allContacts() {
        // TODO Auto-generated method stub
        Document document=XMLUtil.getDocument();
        List<Contact> list=new ArrayList<Contact>();
        List<Element> conElements=(List<Element>)document.selectNodes("//contact");
        for (Element element : conElements) {
            Contact contact=new Contact();
            contact.setId(element.attributeValue("Id"));
            contact.setAge(element.elementText("age"));
            contact.setEmail(element.elementText("email"));
            contact.setName(element.elementText("name"));
            contact.setPhone(element.elementText("phone"));
            contact.setQq(element.elementText("qq"));
            contact.setSex(element.elementText("sex"));
            list.add(contact);
        }
        return list;
    }
 
}

  


 

添加联系人的html页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!DOCTYPE html>
<html>
 
<head>
    <meta charset="utf-8">
    <title>添加联系人</title>
    <style media="screen">
      #btn{
        width:40px;
        width: 50px;
        background: green;
        color: white;
        font-size:14px;
      }
    </style>
</head>
 
<body>
    <center>
        <h2>添加联系人</h2>
    </center>
    <form action="/ContactWeb/addServlet" method="post">
        <table border="1" align="center">
            <tbody>
            
                <tr>
                    <th>姓名</th>
                    <td><input type="text" name="userName" /></td>
                </tr>
                <tr>
                    <th>年龄</th>
                    <td><input type="text" name="age" /></td>
                </tr>
                <tr>
                  <th>性别</th>
                  <td>
                    <input type="radio" name="sex"  value="男"/>男  
                    <input type="radio" name="sex" value="女" />女
                  </td>
                </tr>
                <tr>
                    <th>电话</th>
                    <td><input type="text" name="phone" /></td>
                </tr>
                <tr>
                    <th>QQ</th>
                    <td><input type="text" name="qq" /></td>
                </tr>
                <tr>
                    <th>邮箱</th>
                    <td><input type="text" name="email" /></td>
                </tr>
                <tr>
                  <td colspan="3" align="center">
                    <input type="submit"  value="提交" id="btn"/>
                  </td>
                </tr>
            </tbody>
        </table>
    </form>
</body>
 
</html>

  


接下来则是最重要的servlet(显示首页,所有联系人)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.contactSystem.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.contactSystem.dao.daoImpl.Operater;
import com.contactSystem.entiey.Contact;
 
public class Index extends HttpServlet {
 
    /**
     * 显示所有联系人的逻辑方式
     */
    private static final long serialVersionUID = 1L;
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        Operater operater=new Operater();
        List<Contact> contacts=operater.allContacts();
 
        PrintWriter writer=response.getWriter();
        /**
         * shift+alt+A ——>区域选择
         * 正则表达式:“."表示任意字符,"*"表示多个字符
         *             “/1”表示一行代表匹配一行内容
         */
        String html="";
        html+= "<!DOCTYPE html>";
        html+= "<html>";
        html+= "";
        html+= "<head>";
        html+= "    <meta charset='utf-8'>";
        html+= "    <title>查询所有联系人</title>";
        html+= "    <style media='screen'>";
        html+= "        table td {";
        html+= "            text-align: center;";
        html+= "        }";
        html+= "";
        html+= "        table {";
        html+= "            border-collapse: collapse;";
        html+= "        }";
        html+= "    </style>";
        html+= "</head>";
        html+= "";
        html+= "<body>";
        html+= "    <center>";
        html+= "        <h2>查询所有联系人</h2>";
        html+= "    </center>";
        html+= "    <table border='1' align='center'>";
        html+= "        <tbody>";
        html+= "            <thead>";
        html+= "                <th>编号</th>";
        html+= "                <th>姓名</th>";
        html+= "                <th>性别</th>";
        html+= "                <th>年龄</th>";
        html+= "                <th>电话</th>";
        html+= "                <th>QQ</th>";
        html+= "                <th>邮箱</th>";
        html+= "                <th>操作</th>";
        html+= "            </thead>";
        html+= "            ";
        html+= "            <tr>";
        if (contacts!=null) {
            for (Contact contact : contacts) {
                html+= "                <td>"+contact.getId()+"</td>";
                html+= "                <td>"+contact.getName()+"</td>";
                html+= "                <td>"+contact.getSex()+"</td>";
                html+= "                <td>"+contact.getAge()+"</td>";
                html+= "                <td>"+contact.getPhone()+"</td>";
                html+= "                <td>"+contact.getQq()+"</td>";
                html+= "                <td>"+contact.getEmail()+"</td>";
                html+= "                <td><a href='"+request.getContextPath()+"/FindIdServlet?id="+contact.getId()+"'>修改</a>  <a href='"+request.getContextPath()+"/DeleteServlet?id="+contact.getId()+"'>删除</a></td>";
                html+= "            </tr>";
            }
        }
        html+= "            <tr>";
        html+= "                <td colspan='8'>";
        html+= "                    <a href='"+request.getContextPath()+"/add.html'''>添加联系人</a>";
        html+= "                </td>";
        html+= "            </tr>";
        html+= "        </tbody>";
        html+= "    </table>";
        html+= "</body>";
        html+= "";
        html+= "</html>";
        writer.write(html);
    }
 
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
 
}

  添加联系人的servlet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.contactSystem.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.contactSystem.dao.daoImpl.Operater;
import com.contactSystem.entiey.Contact;
 
public class addServlet extends HttpServlet {
 
    /**
     * 处理添加联系人的逻辑
     */
    private static final long serialVersionUID = 1L;
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String userName=request.getParameter("userName");
        String age=request.getParameter("age");
        String sex=request.getParameter("sex");
        String phone=request.getParameter("phone");
        String qq=request.getParameter("qq");
        String email=request.getParameter("email");
         
        Operater operater=new Operater();
        Contact contact=new Contact();
        contact.setName(userName);
        contact.setAge(age);
        contact.setSex(sex);
        contact.setPhone(phone);
        contact.setQq(qq);
        contact.setEmail(email);
        try {
            operater.addContact(contact);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         
        response.sendRedirect(request.getContextPath()+"/Index");
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
 
}

 修改联系人,根据查找到的联系人,显示在其上面如图(根据显示的首页显示得内容为本页面的默认值)

首先是要去查找这个联系人的信息,即FindIdServlet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package com.contactSystem.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.contactSystem.dao.daoImpl.Operater;
import com.contactSystem.entiey.Contact;
 
public class FindIdServlet extends HttpServlet {
 
    /**
     * 修改联系人逻辑
     */
    private static final long serialVersionUID = 1L;
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer=response.getWriter();
        Operater operater=new Operater();
         
        String id=request.getParameter("id");
        Contact contact=null;
        try {
            contact=operater.findContact(id);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String html="";
        html += "<!DOCTYPE html>";
        html += "<html>";
        html += "<head>";
        html += "    <meta charset='utf-8'>";
        html += "    <title>添加联系人</title>";
        html += "    <style media='screen'>";
        html += "      #btn{";
        html += "        width:40px;";
        html += "        width: 50px;";
        html += "        background: green;";
        html += "        color: white;";
        html += "        font-size:14px;";
        html += "      }";
        html += "    </style>";
        html += "</head>";
        html += "";
        html += "<body>";
        html += "    <center>";
        html += "        <h2>修改联系人</h2>";
        html += "    </center>";
        html += "    <form action='"+request.getContextPath()+"/UpdateServlet' method='post'>";
        html +="<input type='hidden' name='id' value='"+id+"' />";
        html += "        <table border='1' align='center'>";
        html += "            <tbody>";
        html += "                <tr>";
        html += "                    <th>姓名</th>";
        html += "                    <td><input type='text' name='userName' value='"+contact.getName()+"'/></td>";
        html += "                </tr>";
        html += "                <tr>";
        html += "                    <th>年龄</th>";
        html += "                    <td><input type='text' name='age' value='"+contact.getAge()+"' /></td>";
        html += "                </tr>";
        html += "                <tr>";
        html += "                  <th>性别</th>";
        html += "                  <td>";
         
        if (contact.getSex().equals("男")) {
            html += "                    <input type='radio' name='sex'  value='男'    checked='checked'/>男  ";
            html += "                    <input type='radio' name='sex' value='女' />女";
        }else {
            html += "                    <input type='radio' name='sex'  value='男'    />男  ";
            html += "                    <input type='radio' name='sex' value='女' checked='checked' />女";
        }
        html += "                  </td>";
        html += "                </tr>";
        html += "                <tr>";
        html += "                    <th>电话</th>";
        html += "                    <td><input type='text' name='phone' value='"+contact.getPhone()+"' /></td>";
        html += "                </tr>";
        html += "                <tr>";
        html += "                    <th>QQ</th>";
        html += "                    <td><input type='text' name='qq' value='"+contact.getQq()+"'  /></td>";
        html += "                </tr>";
        html += "                <tr>";
        html += "                    <th>邮箱</th>";
        html += "                    <td><input type='text' name='email' value='"+contact.getEmail()+"' /></td>";
        html += "                </tr>";
        html += "                <tr>";
        html += "                  <td colspan='3' align='center'>";
        html += "                    <input type='submit'  value='提交' id='btn'/>";
        html += "                  </td>";
        html += "                </tr>";
        html += "            </tbody>";
        html += "        </table>";
        html += "    </form>";
        html += "</body>";
        html += "";
        html += "</html>";
         
         
        writer.write(html);
         
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
 
}

  然后则是根据提交的内容去修改本地的联系人

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.contactSystem.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.contactSystem.dao.daoImpl.Operater;
import com.contactSystem.entiey.Contact;
 
public class UpdateServlet extends HttpServlet {
 
    /**
     * 将修改后的数据提交
     */
    private static final long serialVersionUID = 1L;
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        response.setContentType("text/html");
         
        request.setCharacterEncoding("utf-8");
        String userName=request.getParameter("userName");
        System.out.println(userName);
        String age=request.getParameter("age");
        String sex=request.getParameter("sex");
        String phone=request.getParameter("phone");
        String qq=request.getParameter("qq");
        String email=request.getParameter("email");
        String id=request.getParameter("id");
        Operater operater=new Operater();
        Contact contact=new Contact();
        contact.setId(id);
        contact.setName(userName);
        contact.setAge(age);
        contact.setSex(sex);
        contact.setPhone(phone);
        contact.setQq(qq);
        contact.setEmail(email);
        try {
            operater.updateContact(contact);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         
        response.sendRedirect(request.getContextPath()+"/Index");
         
         
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
 
}

  最后则是删除联系人,不过要注意的是:火狐浏览器如果判断是get请求的话,会向服务器发送两次请求,可能会导致一些问题,其他的浏览器不会出出现该问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.contactSystem.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.contactSystem.dao.daoImpl.Operater;
 
public class DeleteServlet extends HttpServlet {
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        response.setContentType("text/html;charset=utf-8");
         
        String id=request.getParameter("id");
        Operater operater=new Operater();
        try {
            operater.removeContact(id);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         
        response.sendRedirect(request.getContextPath()+"/Index");
         
    }
 
     
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
}

  

 最后:不用jsp去写,就用servlet去写html真的好累,还是好好学jsp吧。

 

posted @   晓乎  阅读(736)  评论(0编辑  收藏  举报
努力加载评论中...
总访问: counter for blog 次
点击右上角即可分享
微信分享提示