首先画出分析图

实现效果如图

项目下的包如图:


实体包

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的工具包(只是避免了代码的重复使用,将其放进工具包中)

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);
} } }

  


抽象的接口

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();
}

  具体的实现方法和操作

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页面

<!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(显示首页,所有联系人)

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

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

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);
} }

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

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请求的话,会向服务器发送两次请求,可能会导致一些问题,其他的浏览器不会出出现该问题

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吧。

最新文章

  1. 谈一谈前端多容器(多webview平台)处理方案
  2. mysql列转行
  3. unity 协同
  4. Microsoft Visual Studio 2010中文版编译SQLlite3.7.0版
  5. delphi queryCommandState
  6. sqlserver2008 如何定时清理索引碎片
  7. [GIF] Colors in GIF Loop Coder
  8. 理解 Thread.Sleep 函数
  9. 201521123086《JAVA程序设计》第五周作业
  10. [转载] 深入剖析 redis 主从复制
  11. Python 线程复习
  12. 石家庄地铁系统开发(java web版)(二)
  13. jmeter笔记(5)--参数化--CSV Data Set Config
  14. Java面向对象特征之封装
  15. vue filters中使用data中数据
  16. Android横竖屏切换生命周期变化
  17. Java版本翻转字符串
  18. C#对Windows文件/文件夹/目录的一些操作总结
  19. Linux知识(6)----卸载安装的包
  20. B/S和C/S结构的区别

热门文章

  1. STM32固件库
  2. [原博客] BZOJ 1257 [CQOI2007] 余数之和
  3. http://jinnianshilongnian.iteye.com/blog/1996071
  4. QT类库与Delphi类库的体系结构对比——两者十分类似!
  5. No modifications are allowed to a locked ParameterMap
  6. ajax 初始化请求前携带参数
  7. Trace和Debug主要用法
  8. 【HDOJ】1160 FatMouse&#39;s Speed
  9. IIS中的Application.CommonAppDataPath
  10. 通过 Azure Media Encoder 降低编码成本