首页
添加联系人
查询所有联系人
查看和修改联系人
修改结果
源码公开
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
版权归属于于: ®李景
</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>