设计一个通讯录主页面

 <!DOCTYPE html>
<html>
<head>
<title>电话本首页</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<table align="center" border="1">
<form>
<center><h1>电话簿</h1></center>
<tr>
<td>1.<a href="/myPhoneBook/PhoneList"><input type="button" value="查询联系人"/></a></td>
</tr>
<tr>
<td>2.<a href="add.html"><input type="button" value="添加联系人"/></a></td>
</tr>
<tr>
<td>3.<a href="update.html"><input type="button" value="修改联系人"/></a></td>
</tr>
<tr>
<td>4.<a href="/myPhoneBook/Delete"><input type="button" value="删除联系人"/></a></td>
</tr> </form>
</table>
</body>
</html>

1.添加联系人:

1.1保存页面

<!DOCTYPE html>
<html>
<head>
<title>添加联系人页面</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<form action="/myPhoneBook/Add" method="POST">
<table cellpadding="10" border="1" align="center">
<tr>
<td>编号</td>
<td><input type="text" name="id"/></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="age"/></td>
</tr>
<tr>
<td>性别</td>
<td>
男<input type="radio" checked="checked" name="gender" value="男"/>
女<input type="radio" name="gender" value="女"/>
</td>
</tr>
<tr>
<td>电话</td>
<td><input type="text" name="phone"/></td>
</tr>
<tr>
<td>QQ</td>
<td><input type="text" name="qq"/></td>
</tr>
<tr>
<td>邮箱</td>
<td><input type="text" name="mail"/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="添加联系人"/><a href="index.html"></a></td>
</tr>
</table>
</form>
</body>
</html>

1.2保存逻辑:

AddServlet  (接收页面数据(getParameter()),使用dom4j保存到xml)修改联系人(完成)

 public class Add extends HttpServlet {

     public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8"); String id = request.getParameter("id");
String name = request.getParameter("name");
String age = request.getParameter("age");
String gender = request.getParameter("gender");
String phone = request.getParameter("phone");
String qq = request.getParameter("qq");
String mail = request.getParameter("mail"); try {
write(id,name,age,gender,phone,qq,mail);
} catch (DocumentException e) {
e.printStackTrace();
} response.getWriter().write("<font color=\"red\" size=\"6px\">添加成功</font><a href=\"index.html\">返回首页</a>");
} public void write(String id, String name, String age, String gender,
String phone, String qq, String mail) throws IOException, DocumentException {
//关联或者创建一个xml文档
// File file = new File("h:/testdemo/jiuye/myPhoneBook/Person.xml");
File file = new File("/Person.xml");
//判断xml文档是否存在
if(!file.exists()){
//不存在,创建一个文档 ,并且添加根标签
Document doc = DocumentHelper.createDocument();
Element rootElem = doc.addElement("Persons");
save(file,doc);
}
//存在,读取这个文档根标签
Document doc = new SAXReader().read(file);
Element rootElem = doc.getRootElement(); Element perElem = rootElem.addElement("person"); perElem.addElement("id").setText(id); perElem.addElement("name").setText(name); perElem.addElement("age").setText(age); perElem.addElement("gender").setText(gender); perElem.addElement("phone").setText(phone); perElem.addElement("qq").setText(qq); perElem.addElement("mail").setText(mail);
save(file, doc);
} public void save(File file, Document doc) throws IOException {
//将Document对象写入xml文档
FileOutputStream out = new FileOutputStream(file);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
} }

2.修改联系人

2.1修改页面

 <!DOCTYPE html>
<html>
<head>
<title>修改联系人页面</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<form action="/myPhoneBook/Update" method="POST">
<center><h1>修改联系人</h1></center>
<table cellpadding="10" border="1" align="center">
<tr>
<td>需要修改人编号</td>
<td><input type="text" name="id_1"/></td>
</tr>
<tr>
<td>编号</td>
<td><input type="text" name="id"/></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="age"/></td>
</tr>
<tr>
<td>性别</td>
<td>
男<input type="radio" checked="checked" name="gender" value="男"/>
女<input type="radio" name="gender" value="女"/>
</td>
</tr>
<tr>
<td>电话</td>
<td><input type="text" name="phone"/></td>
</tr>
<tr>
<td>QQ</td>
<td><input type="text" name="qq"/></td>
</tr>
<tr>
<td>邮箱</td>
<td><input type="text" name="mail"/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="确认修改"/></td>
</tr>
</table>
</form>
</body>
</html>

2.2修改逻辑

UpdateServlet ( 接收页面数据,把数据保存xml )

 public class Update extends HttpServlet {

     public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String id_1 = request.getParameter("id_1");
String id = request.getParameter("id");
String name = request.getParameter("name");
String age = request.getParameter("age");
String gender = request.getParameter("gender");
String phone = request.getParameter("phone");
String qq = request.getParameter("qq");
String mail = request.getParameter("mail"); try {
update(id_1,id,name,age,gender,phone,qq,mail,response);
} catch (Exception e) {
e.printStackTrace();
}
} public void update(String id_1, String id, String name, String age,
String gender, String phone, String qq, String mail,
HttpServletResponse response) throws Exception { response.setContentType("text/html;charset=utf-8");
//关联或者创建一个xml文档
// File file = new File("h:/testdemo/jiuye/myPhoneBook/Person.xml");
File file = new File("/Person.xml");
//判断xml文档是否存在
Document doc = new SAXReader().read(file);
Element rootElem = doc.getRootElement(); Iterator<Element> perIt = rootElem.elementIterator("person");
while (perIt.hasNext()) {
Element idEle = perIt.next().element("id");
if(id_1.equals(idEle.getText())){
//得到对应ID的父节点
Element parent = idEle.getParent();
//根据父节点修改子节点的文本
parent.element("id").setText(id);
parent.element("name").setText(name);
parent.element("age").setText(age);
parent.element("gender").setText(gender);
parent.element("phone").setText(phone);
parent.element("qq").setText(qq);
parent.element("mail").setText(mail);
response.getWriter().write("<font color=\"red\" size=\"6px\">修改成功</font><a href=\"index.html\">返回首页</a>");
save(file, doc);
}
}
} private void save(File file, Document doc) throws FileNotFoundException,
UnsupportedEncodingException, IOException {
//将Document对象写入xml文档
FileOutputStream out = new FileOutputStream(file);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
} }

3.删除联系人:

3.1删除逻辑:

 public class Delete extends HttpServlet {

     public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//创建一个删除页面
try {
show(response);
} catch (Exception e) {
e.printStackTrace();
} request.setCharacterEncoding("utf-8");
//获取要删除的联系人的ID
String temp = request.getParameter("choose");
if(temp!=null){
int choose = Integer.parseInt(temp);
try {
//进行删除操作
remove(choose,response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
} public void remove(int choose, HttpServletResponse response) throws Exception { //关联或者创建一个xml文档
// File file = new File("h:/testdemo/jiuye/myPhoneBook/Person.xml");
File file = new File("/Person.xml");
Document doc = new SAXReader().read(file);
Element rootElem = doc.getRootElement(); Element perElem = (Element) rootElem.elements().get(choose-1);
perElem.detach();
save(file,doc);
response.getWriter().write("<center><font color=\"red\" size=\"6px\">删除成功</font><a href=\"index.html\">返回首页</a></center>");
} public void save(File file, Document doc) throws Exception {
//将Document对象写入xml文档
FileOutputStream out = new FileOutputStream(file);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
} public void show(HttpServletResponse response) throws Exception { response.setContentType("text/html;charset=utf-8"); // File file = new File("h:/testdemo/jiuye/myPhoneBook/Person.xml");
File file = new File("/Person.xml");
response.getWriter().write("<html><head><title>联系人页面</title><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"></head><body><center><h1>联系人列表</h1></center><form action=\"/myPhoneBook/Delete\" method=\"POST\"><table cellpadding=\"10\" border=\"1\" align=\"center\"><tr align=\"center\"><td></td><td>编号</td><td>姓名</td><td>年龄</td><td>性别</td><td>电话</td><td>QQ</td><td>邮箱</td></tr>");
Document doc = new SAXReader().read(file);
Element rootElem = doc.getRootElement(); Iterator<Element> it = rootElem.elementIterator("person");
int count = 1;
while(it.hasNext()){
List<Element> list = it.next().elements();
response.getWriter().write("<tr align=\"center\"><td>"+count+".<input type=\"radio\" name=\"choose\" value=\""+count+"\"/></td>");
for (Element elem : list) {
response.getWriter().write("<td>"+elem.getText()+"</td>");
}
response.getWriter().write("</tr>");
count++;
}
response.getWriter().write("<tr><td colspan=\"8\" align=\"center\"><input type=\"submit\" value=\"删除联系人\"/><a href=\"index.html\">回到首页</a></td></tr></table></form>");
} }

4.显示联系人列表

public class PhoneList extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { try {
showList(response);
} catch (Exception e) {
e.printStackTrace();
}
} public void showList(HttpServletResponse response) throws Exception { response.setContentType("text/html;charset=utf-8"); // File file = new File("h:/testdemo/jiuye/myPhoneBook/Person.xml");
File file = new File("/Person.xml"); response.getWriter().write("<html><head><title>联系人页面</title><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"></head><body><center><h1>联系人列表</h1></center><table cellpadding=\"10\" border=\"1\" align=\"center\"><tr align=\"center\"><td>编号</td><td>姓名</td><td>年龄</td><td>性别</td><td>电话</td><td>QQ</td><td>邮箱</td></tr>");
if(!(file.exists())){
Document doc = DocumentHelper.createDocument();
Element rootElem = doc.addElement("Persons");
save(file,doc);
}
Document doc = new SAXReader().read(file);
Element rootElem = doc.getRootElement(); Iterator<Element> it = rootElem.elementIterator("person");
while(it.hasNext()){
List<Element> list = it.next().elements();
response.getWriter().write("<tr align=\"center\">");
for (Element elem : list) {
response.getWriter().write("<td>"+elem.getText()+"</td>");
}
response.getWriter().write("</tr>");
}
response.getWriter().write("</table><center><a href=\"index.html\">回到首页</a> <a href=\"add.html\">添加联系人</a> <a href=\"/myPhoneBook/Delete\">删除联系人</a></center>");
}
public void save(File file, Document doc) throws IOException {
//将Document对象写入xml文档
FileOutputStream out = new FileOutputStream(file);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
} }

<项目><day12>通讯录(自己做的)的更多相关文章

  1. <项目><day12>通讯录(视频)

    1 需求分析(需求分析师) 功能分析: 1)添加联系人 2)修改联系人 3)删除联系人 4)查询所有联系人 2 需求设计(系统分析师/架构师/资深开发人员) 2.1设计实体(抽象实体) 联系人实体: ...

  2. Python之路,Day12 - 那就做个堡垒机吧

    Python之路,Day12 - 那就做个堡垒机吧   本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多 ...

  3. 看完你也能独立负责项目!产品经理做APP从头到尾的所有工作流程详解!

    (一)项目启动前 从事产品的工作一年多,但自己一直苦于这样或者那样的困惑,很多人想要从事产品,或者老板自己创业要亲自承担产品一职,但他们对产品这个岗位的认识却不明晰,有的以为是纯粹的画原型,有的是以为 ...

  4. 实战项目:通讯录&nbsp;UI—第十一天

     1.推出视图的两种方式:  1.通过导航控制器push到下一个界面,使用pop返回到上一个界面 2.通过模态的形式推出视图,不需要依赖于导航控制器,通过使用present到下一个界面,通过dismi ...

  5. 在 Laravel 项目中使用 Elasticsearch 做引擎,scout 全文搜索(小白出品, 绝对白话)

    项目中需要搜索, 所以从零开始学习大家都在用的搜索神器 elasiticsearch. 刚开始 google 的时候, 搜到好多经验贴和视频(中文的, 英文的), 但是由于是第一次接触, 一点概念都没 ...

  6. 如何学习JavaEE,项目又该如何做?

    本文主要分为三个部分: 如何学习java基础 如何学习javaEE 你关心的项目问题 01 java基础学习 建议初学者看视频学习,不推荐看书.入门视频选择非常重要,最好是通俗易懂.深入浅出的教学视频 ...

  7. 【spring】在spring cloud项目中使用@ControllerAdvice做自定义异常拦截,无效 解决原因

    之前在spring boot服务中使用@ControllerAdvice做自定义异常拦截,完全没有问题!!! GitHub源码地址: 但是现在在spring cloud中使用@ControllerAd ...

  8. iOS项目 -- 模仿花椒直播做的第二层界面完整版

    ,项目开始做了,好遗憾的是,花椒app有更新了版本,

  9. 在Centos7中创建.net core 项目,并用Apache做代理服务器部署.net core项目

    这一篇实例记录一次用Centos7创建并部署.net core项目的过程,希望能帮到用到的小伙伴. Kestrel 是 ASP.NET Core 项目模板中包括的默认 Web 服务器,Kestrel可 ...

随机推荐

  1. zc.buildout构建项目时报错‘AttributeError: '_NamespacePath' object has no attribute 'sort'’

    在使用zc.buildout构建项目时如果碰到‘AttributeError: '_NamespacePath' object has no attribute 'sort'’报错: An inter ...

  2. javaweb系列-关于HttpSessionListener的sessionDestroyed什么时候触发

    根据书本写了下面这个监听器,然后开始调试,打开一个浏览器来访问该网页,可以正常触发sessionCreated,然后关闭浏览器,发现没有触发sessionDestroyed,然后我怀疑是不是这个监听器 ...

  3. hibernate5.x版本org.hibernate.MappingException: Unknown entity问题

    /* * //创建hibernate配置对象 Configuration cfg = new Configuration(); cfg.configure("hibernate.cfg.xm ...

  4. JavaSE-28 hashCode()方法、equals()方法和==相关概念

    概述 Java中,Object类是所有类的基类:如果一个类没有明确继承其他已定义的类,则默认继承Object类. Object类提供了以下方法,对于其他方法,请参考前期专题描述. hashCode() ...

  5. 内置函数filter和map

    filter filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回 ...

  6. 洛谷——P4109 [HEOI2015]定价

    P4109 [HEOI2015]定价 模拟(有点儿贪心) 题目要求在区间$l,r$中$x$后导0尽量多,且除去后导0之外,最后一个数尽量是$5$才最优 从$l$到$r$依次考虑, 假设当前考虑到$50 ...

  7. MySQL InnoDB配置统计信息

    MySQL InnoDB配置统计信息 1. 配置持久化(Persistent)统计信息参数 1.1 配置自动触发更新统计信息参数 1.2 配置每张表的统计参数 1.3 配置InnoDB优化器统计信息的 ...

  8. InnoDB INFORMATION_SCHEMA Metrics Table

    InnoDB INFORMATION_SCHEMA Metrics Table INNODB_METRICS表将所有InnoDB性能和资源相关计数器合并到一个INFORMATION_SCHEMA表中. ...

  9. phpize Cannot find autoconf. 错误解决

    phpize Configuring for: PHP Api Version: 20151012 Zend Module Api No: 20151012 Zend Extension Api No ...

  10. python 学习总结1

    计算机与程序设计 一.计算机的概念 1.计算机是根据指令操作数据的设备. 2.计算机主要包括两个功能性一个是功能性另一个是计算性 功能性是对数据的操作,表现为数据计算,输入输出处理和结果存储 可编程性 ...