编码实战Web端联系人的增删改查
首先画出分析图
实现效果如图
项目下的包如图:
实体包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 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的工具包(只是避免了代码的重复使用,将其放进工具包中)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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); } } } |
抽象的接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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(); } |
具体的实现方法和操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | 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页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <!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(显示首页,所有联系人)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | 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); } } |
然后则是根据提交的内容去修改本地的联系人
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | 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请求的话,会向服务器发送两次请求,可能会导致一些问题,其他的浏览器不会出出现该问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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吧。
很希望自己是一棵树,守静、向光、安然,敏感的神经末梢,触着流云和微风,窃窃的欢喜。脚下踩着最卑贱的泥,很踏实。还有,每一天都在隐秘成长。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步