servlet通讯录系统

首页

这里写图片描述

添加联系人

这里写图片描述

查询所有联系人

这里写图片描述

查看和修改联系人

这里写图片描述
这里写图片描述
这里写图片描述

修改结果

这里写图片描述

源码公开

Contact.java

package cn.itcast.dom4j;

/**
 * Contact对象
 */
public class Contact {
    private String id ;
    private String name;
    private String sex;
    private String age;
    private String phone;
    private String email;
    private String qq;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.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 getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getQq() {
        return qq;
    }

    public void setQq(String qq) {
        this.qq = qq;
    }


     public String toString(){
        return "[name="+this.name+"  sex="+this.sex+"  age="+this.age+"  phone="+this.phone+"  email="+this.email+"  qq="+this.qq+"]";
     }
}

ContactImpl.java

package cn.itcast.dom4j;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * ContactOperator接口的实现类
 */
public class ContactImpl implements ContactOperator {
    //定义通讯录文件
    static File file =new File("d:/contact.xml");
    static Document document = null ;

    @Override
    public void init() throws  DocumentException {
        document = new SAXReader().read(file);
    }

    @Override
    public void add(Contact contact) throws DocumentException, IOException {
        //添加函数
        //获取根节点


        Element rootElem = document.getRootElement();

        Element contactElem = rootElem.addElement("contact");
        //设置id属性
        contactElem.addAttribute("id",contact.getId());

        //添加name节点
        Element nameElem = contactElem.addElement("name");
        //设置name文本
        nameElem.addText(contact.getName());

        Element sexElem = contactElem.addElement("sex");
        sexElem.addText(contact.getSex());

        Element ageElem = contactElem.addElement("age");
        ageElem.addText(contact.getAge());

        Element phoneElem = contactElem.addElement("phone");
        phoneElem.addText(contact.getPhone());

        Element emailElem = contactElem.addElement("email");
        emailElem.addText(contact.getEmail());

        Element qqElem = contactElem.addElement("qq");
        qqElem.addText(contact.getQq());

        write();
    }

    @Override
    public void del(String id) throws IOException {
        Element contactElem = (Element) document.selectSingleNode("//contact[@id=" + id + "]");
        contactElem.detach();
        write();
    }

    @Override
    public void gai(String id,Contact contact) throws IOException {
        //获取到需要修改的节点
        Element contactElem= (Element) document.selectSingleNode("//contact[@id=" + id + "]");

        Element nameElem = contactElem.element("name");
        nameElem.setText(contact.getName());
        Element sexElem = contactElem.element("sex");
        sexElem.setText(contact.getSex());

        Element ageElem = contactElem.element("age");
        ageElem.setText(contact.getAge());

        Element phoneElem = contactElem.element("phone");
        phoneElem.setText(contact.getPhone());

        Element emailElem = contactElem.element("email");
        emailElem.setText(contact.getEmail());

        Element qqElem = contactElem.element("qq");
        qqElem.setText(contact.getQq());


       write();
    }

    @Override
    public List<Contact> all() {
        List<Contact> list = new ArrayList<Contact>();
        //获取到所有contact节点

        List<Element> list1 =(List<Element>) document.selectNodes("//contact");
        //遍历并封装入Contact对象
        for (Element e :list1){
            Contact c = new Contact();
            c.setId(e.attributeValue("id"));
            c.setName(e.elementText("name"));
            c.setSex(e.elementText("sex"));
            c.setAge(e.elementText("age"));
            c.setPhone(e.elementText("phone"));
            c.setEmail(e.elementText("email"));
            c.setQq(e.elementText("qq"));
            //添加对象到集合
            list.add(c);
        }
        //返回给Main函数
        return list;
    }

    @Override
    public void write() throws IOException {
        //设置输出路径
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        //美观输出
        OutputFormat format = OutputFormat.createPrettyPrint();
        //编码
        format.setEncoding("GBK");
        //创建
        XMLWriter writer = new XMLWriter(fileOutputStream,format);
        //写出
        writer.write(document);
    }

    @Override
    public Contact find(String id) {
        Contact contact = new Contact();

        Element element = (Element)document.selectSingleNode("//contact[@id=" + id + "]");
        contact.setId(element.attributeValue("id"));
        contact.setName(element.elementText("name"));
        contact.setSex(element.elementText("sex"));
        contact.setAge(element.elementText("age"));
        contact.setPhone(element.elementText("phone"));
        contact.setEmail(element.elementText("email"));
        contact.setQq(element.elementText("qq"));
        return  contact;
    }
}

ContactMain.java

package cn.itcast.dom4j;

import org.dom4j.DocumentException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;


/**
 * 主程序
 * 注意:  目标XML文件一定要有contactlist跟标签
 */
public class ContactMain extends HttpServlet {
    Contact contact =null ;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //创建工具类
        ContactOperator contactOperator = new ContactImpl();
        //初始化函數必須有
        try {
            contactOperator.init();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        //设置编码 统一为GBK编码
        req.setCharacterEncoding("GBK");
        resp.setContentType("text/html;charset=GBK");
        //确认提交的按钮是 哪个jsp文件发出的
        String flag = req.getParameter("enter");
        //选择
        if ("确认添加".equals(flag)) {
            //创建一个联系人对象
            contact = new Contact();
            //设置联系人对象的属性
            contact.setId(req.getParameter("id"));
            contact.setName(req.getParameter("name"));
            contact.setAge(req.getParameter("age"));
            contact.setEmail(req.getParameter("email"));
            contact.setPhone(req.getParameter("phone"));
            contact.setQq(req.getParameter("qq"));
            contact.setSex(req.getParameter("sex"));
            //把联系人传给add函数

            try {
                contactOperator.add(contact);
            } catch (DocumentException e) {
                e.printStackTrace();
            }

            //结果显示函数  这里最好添加一个返回首页的按钮
            resp.getWriter().write("添加成功");
        }else if("查询".equals(flag)){
            //传送参数给查询方法 返回一个Contact对象
            contact=contactOperator.find(req.getParameter("gai"));
            System.out.println("返回成功");
            req.setAttribute( "Contact",contact);
            req.getRequestDispatcher("./gai.jsp").forward(req,resp);

        }else if ("确认修改".equals(flag)) {
            //获取删除的编号
            String id = req.getParameter("gai");
            //创建一个联系人对象
            contact = new Contact();
            //设置联系人对象的属性
            contact.setId(req.getParameter("id"));
            contact.setName(req.getParameter("name"));
            contact.setAge(req.getParameter("age"));
            contact.setEmail(req.getParameter("email"));
            contact.setPhone(req.getParameter("phone"));
            contact.setQq(req.getParameter("qq"));
            contact.setSex(req.getParameter("sex"));
            //修改函数 传送参数给实现类的gai方法
            contactOperator.gai(id,contact);
            resp.getWriter().write("修改成功");

        } else if ("确认删除".equals(flag)) {
            //获取删除的编号
            String id = req.getParameter("del");
            //删除函数 传送参数给实现类的del方法
            contactOperator.del(id);
            //结果显示函数
            resp.getWriter().write("删除成功");
        } else if ("查询所有联系人".equals(flag)) {

            //通过all()函数获取所有联系人对象的集合
            List<Contact> list =contactOperator.all();
            //已测试 list没问题
            //for(Contact contact1:list) System.out.println(contact1);
            //传出去
            req.setAttribute( "List",list);
            req.getRequestDispatcher("./all.jsp").forward(req,resp);
            //已测试
            // System.out.println("已发送");
            /*//以一个合适的格式输出
            resp.getWriter().write("<table border=\"1\"><tr>");
            resp.getWriter().write("<th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>手机号</th><th>邮箱</th><th>QQ</th></tr>");
            for(Contact contact1:list){
                resp.getWriter().write("<tr><th>"+contact1.getId()+"</th>");
                resp.getWriter().write("<th>"+contact1.getName()+"</th>");
                resp.getWriter().write("<th>"+contact1.getSex()+"</th>");
                resp.getWriter().write("<th>"+contact1.getAge()+"</th>");
                resp.getWriter().write("<th>"+contact1.getPhone()+"</th>");
                resp.getWriter().write("<th>"+contact1.getEmail()+"</th>");
                resp.getWriter().write("<th>"+contact1.getQq()+"</th></tr>");
            }
            resp.getWriter().write("</table>");

            //查询完毕的标志
            resp.getWriter().write(".......</br>");
            resp.getWriter().write("查询完毕");
            resp.getWriter().write("</br><a href=\"index.html\">返回首页</a>");*/
        }
        //System.out.println("Reload。。。。。。。。OK");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

ContactOperator.java

package cn.itcast.dom4j;

import org.dom4j.DocumentException;


import java.io.IOException;
import java.util.List;

/**
 * 接口
 */
interface ContactOperator {
    public void init() throws DocumentException;
    public void add(Contact contact) throws DocumentException, IOException;
    public void del(String id) throws IOException;
    public void gai(String id,Contact contact) throws IOException;
    public List<Contact> all();
    public Contact find(String id);
    public void write() throws IOException;
}

add.jsp

<%--
  Created by IntelliJ IDEA.
  User: LiJing
  Date: 2017/9/13
  Time: 9:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=GBK" language="java" %>
<html>
<head>
    <title>添加联系人</title>
</head>
<body>
<form action="ContactMain" method="post">

    <tr>
      <td>编号</td>
      <td><input name="id" type="text" />

    </tr>
    </br>

    <tr>
      <td>姓名</td>
      <td><input name="name" type="text"/></td>
    </tr>
  </br>
    <tr>
      <td>性别:</td>
      <td><input name="sex" checked="true" value="man" type="radio"><input name="sex" value="woman" type="radio">
      </td>
    </tr>
  </br>
    <tr>
      <td>年龄</td>
      <td><input name="age" type="text" />
    </tr>
  </br>
    <tr>
      <td>电话</td>
      <td><input name="phone" type="text" />
    </tr>
  </br>
    <tr>
      <td>邮箱</td>
      <td><input name="email" type="text" >
    </tr>
  </br>
    <tr>
      <td>QQ</td>
      <td><input name="qq" type="text" />
    </tr>
  </br>
  <input type="submit" name="enter" value="确认添加" >
  <input type="reset" value="重新输入">
  </br>
</form>
</body>
</html>

all.jsp

<%@ page import="cn.itcast.dom4j.Contact" %>
<%@ page import="java.util.List" %>
<%@ page import="cn.itcast.dom4j.ContactMain" %>
<%@ page import="java.util.ArrayList" %>
<%--
  Created by IntelliJ IDEA.
  User: LiJing
  Date: 2017/9/13
  Time: 21:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=GBK" language="java" %>
<html>
<head>
  <title></title>
  <script>
    <%--函数 一旦网页打开自动点击一下查询--%>
    function test(){
      document.getElementById("addBtn").click();
    }

  </script>
</head>
<%--函数体加载完成后 执行--%>
<body onload="test()">
<form action="ContactMain" method="post">
<div style="display: none"><input id="addBtn" type="submit" name="enter" value="查询所有联系人" ></div>
<%
  /**
   * 这里需要创建一个空的对象 因为网页一打开就需要获取文本框中的内容
   */
  List<Contact> list=new ArrayList<Contact>();
  if (((List<Contact>) request.getAttribute("List"))==null) {
      list.add(new Contact());
      //System.out.println("没有获取了");
  }else {

    list = (List<Contact>) request.getAttribute("List");
    //System.out.println("获取了");
  }
    %>
    <table border=\"1\"><tr>
    <th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>手机号</th><th>邮箱</th><th>QQ</th></tr>

    <%for (Contact contact1 : list) {
      /*已测试 可以使用
      System.out.println(contact1);*/
    %>
      <tr><th> <%=contact1.getId()%> </th>
  <th> <%=contact1.getName()%> </th>
  <th> <%=contact1.getSex()%> </th>
  <th> <%=contact1.getAge()%> </th>
  <th> <%=contact1.getPhone()%> </th>
  <th> <%=contact1.getEmail()%> </th>
  <th> <%=contact1.getQq()%> </th></tr>

 <%
 }%></table>

</br></br>


</form>
</body>
</html>

del.jsp

<%--
  Created by IntelliJ IDEA.
  User: LiJing
  Date: 2017/9/13
  Time: 19:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=GBK" language="java" %>
<html>
<head>
    <title>删除联系人</title>
</head>
<body>
<%--form必须在这个文本的上方 否则文本信心读不过去--%>
<form action="ContactMain" method="post">
请输入你要删除的联系人的编号<input name="del" type="text">
</br>

  <input type="submit" name="enter" value="确认删除">
</form>

</body>
</html>

gai.jsp

<%@ page import="cn.itcast.dom4j.Contact" %>
<%--
  Created by IntelliJ IDEA.
  User: LiJing
  Date: 2017/9/13
  Time: 21:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=GBK" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>
<%
  /**
   * 这里需要创建一个空的对象 因为网页一打开就需要获取文本框中的内容
   */
  Contact contact;
  if(((Contact)request.getAttribute("Contact")==null)){
    contact = new Contact();
  }else{
    contact =(Contact)request.getAttribute("Contact");
  } ;%>
<form action="ContactMain" method="post">
  请输入你要修改的联系人的编号<input name="gai" type="text" value="<%=contact.getId()%>">
  </br>
  <input type="submit" name="enter" value="查询">
  </br>
  <hr>
  <tr>
    <td>姓名</td>
    <td><input name="name" type=text"


               value = "<%=contact.getName()%>"
      />
    </td>
  </tr>
  </br>
  <tr>
    <td>性别:</td>
    <td><%
    /**
     * 如果想选中的话 只需要加一个checked就好了
     */
      String man = "";
      String woman = "";
      if ("man".equals(contact.getSex())) {
        man = "checked";
      }else if ("woman".equals(contact.getSex())){
        woman="checked";
      }
    %><input name="sex" <%=man%> value="man" type="radio">
      女<input name="sex" <%=woman%> value="woman" type="radio">
    </td>
  </tr>
  </br>
  <tr>
    <td>年龄</td>
    <td><input name="age" type="text"  value = "<%=contact.getAge()%>" />
  </tr>
  </br>
  <tr>
    <td>电话</td>
    <td><input name="phone" type="text" value = "<%=contact.getPhone()%>" />
  </tr>
  </br>
  <tr>
    <td>邮箱</td>
    <td><input name="email" type="text" value = "<%=contact.getEmail()%>" >
  </tr>
  </br>
  <tr>
    <td>QQ</td>
    <td><input name="qq" type="text" value = "<%=contact.getEmail()%>" />
  </tr>
  </br>
  <input type="submit" name="enter" value="确认修改">
  </br>


</form>
</body>
</html>

index.html

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>通讯录系统</title>

</head>

    <frameset  rows="10%,70%,*" >
        <frame  src="top.html" />
        <frameset cols="20%,*">
            <frame src="left.html" />
            <frame name="center" src="center.html"/>
        </frameset>
        <frame src="foot.html"/>
    </frameset><noframes></noframes>

</html>

left.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>无标题文档</title>
</head>
<body>
<dl>
    <dt>功能介绍</dt>
    <dd><a href="add.jsp" target="center" >添加联系人</a></dd>
    <dd><a href="del.jsp" target="center">删除联系人</a></dd>
    <dd><a href="gai.jsp" target="center">查看和修改联系人</a></dd>
    <dd><a href="all.jsp" target="center" >查询所有联系人</a></dd>

</dl>
</body>
</html>

top.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>无标题文档</title>
</head>
<body>
    <div align="center"><font color="#ff7f50" size="30px">通讯录管理系统</font>    <font color="aqua" size="3px">v1.0 By LiJing</font></div>


</body>
</html>

foot.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>无标题文档</title>
</head>
<body>
    <div align="center">
        合作伙伴:百度、 腾讯、 微软、甲骨文....<br/>
        友情链接: 305学术交流中心<br/>
        联系方式:020-123456
        版权归属于于: &reg;李景

    </div>

</body>
</html>

center.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
    <img src="img/1.jpg" alt=""/>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值