设计一个通讯录主页面

 <!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. Microsoft Windows Server 部署

    Microsoft Windows Server 部署 多重引导 计算机可以被设置多重引导,即在一台计算机上安装多个操作系统..在安装多重引导的操作系统时,还要注意版本的类型,一般应先安装版本低的,再 ...

  2. Openjudge-4110-圣诞老人的礼物

    这一题是一道贪心的题目,但是它比较特殊的地方在于糖果可以分开拿,我们不必整箱拿,所以我们可以直接就把糖果按照价值比从大到小排序,然后整箱装不下的时候,剩余重量乘以它的价值比,这样就算出来了. 对于结构 ...

  3. [CF] 219D Choosing Capital for Treeland

    题意翻译 题目描述 Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市.每条道路只能单向通行.现在政府需要决定选择哪个城市为首都.假如城市i成为了首都,那么为了使首都能 ...

  4. (9) tomcat中实现同一虚拟机中所有应用程序单点登录SSO

  5. 深入Linux内核架构——进程管理和调度(上)

    如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...

  6. Java方法传递参数传值还是传址的问题

    这几天重构项目代码遇到一个疑问:可不可以在方法A中定义一个boolean变量b为false,然后A调用方法C把b传递到C方法中经过一些列业务判断后修改为true,C执行结束后A方法中b的值还是原来的f ...

  7. maven打包oracle jdbc驱动

    背景 由于版权问题,maven中央仓库缺少oracle jdbc的驱动,这个给开发带来了很多不便利性.也出现各种各样的解决方案,基本就两种思路: 将oracle驱动安装到本地仓库,这个需要大家统一好名 ...

  8. mac 监控文件变化并重启php

    自己撸一个框架,需要监控代码变化 安装fswatch brew install fswatch shell重启PHP脚本reload.sh #!/bin/sh do ps -ef | grep php ...

  9. (二十一)python 3 内置函数

    阅读目录 1.abs() 2.dict() 3.help() 4.min() 5.setattr() 6.all() 7.dir() 8.hex() 9.next() 10.slice() 11.an ...

  10. Python中的函数(5)

    一.向函数中传递任意数量的实参 有时候,你预先不知道函数需要接受多少个实参,Python中函数可以收集任意数量的实参. 栗子:来看一个打印好友列表功能的函数,它需要接收任意数量的好友名.如下: def ...