简单的用户注册功能:
首先,我们需要一个xml,用来存储用户的注册信息;
我们在项目的src文件夹下建立了一个user.xml文件。
user.xml:
我们只写了xml的头,和需要的一个根元素
<?xml version="1.0" encoding="UTF-8"?> <users> </users>
写一个公共类工厂:Dom4jFactory
大家共用访问同一个document~。
(单例)
Dom4jFactory.java
package cn.hncu.factory; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.dom4j.Document; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Dom4jFactory { private static Document dom = null; private static String path; //静态块!只会运行一次!特点是在类加载的时候就执行 static{ try{ SAXReader sax = new SAXReader(); // 学习一下服务器下的资源路径加载方式(因为我们的资源已经从MyEclipse中发布到Tomcat服务器中了,所以跟原来纯Java项目不一样了) // 利用当前类找到它的类加载器,然后通过该类加载器再去获得资源路径 path = Dom4jFactory.class.getClassLoader().getResource("users.xml").getPath(); //getClassLoader()返回:加载此对象所表示的类或接口的类加载器。 //public URL getResource(String name)返回:读取资源的 URL 对象;如果找不到该资源,或者调用者没有足够的权限获取该资源,则返回 null。 //此方法首先搜索资源的父类加载器;如果父类加载器为 null,则搜索的路径就是虚拟机的内置类加载器的路径。 //public String getPath()获取此 URL 的路径部分。 System.out.println(path); dom = sax.read(new FileInputStream(path)); }catch (Exception e){ throw new RuntimeException(e.getMessage(), e); } } /** * @return 获取用户的Document */ public static Document getDocument(){ return dom; } /** * 进行users.xml的保存,保存到本地 */ public static void save(){ try { XMLWriter w = new XMLWriter(new FileOutputStream(path)); w.write(dom); w.close(); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e.getMessage(), e); } catch (FileNotFoundException e) { throw new RuntimeException(e.getMessage(), e); } catch (IOException e) { throw new RuntimeException(e.getMessage(), e); } } /** * 测试用 * @param args */ public static void main(String[] args){ System.out.println( getDocument() ); } }
index.jsp:
<hr/> <h2>以下演示一个小项目---用户注册</h2> <h3>用户注册</h3> <form action="/myServletDemo/reg" method="post"> 姓名:<input type="text" name="name" /><br/> 密码:<input type="password" name="pwd"/><br/> <input type='submit' value="注册"/> </form> <br/> <a href="/servletDemo/reg">显示所有用户</a>
web.xml:
<servlet> <servlet-name>RegServlet</servlet-name> <servlet-class>cn.hncu.servlet.day2.RegServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RegServlet</servlet-name> <url-pattern>/reg</url-pattern> </servlet-mapping> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>DelServlet</servlet-name> </servlet> <servlet-mapping> <servlet-name>DelServlet</servlet-name> <url-pattern>/del</url-pattern> </servlet-mapping>
RegServlet.java:用户注册:
package cn.hncu.servlet.day2; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import cn.hncu.factory.Dom4jFactory; public class RegServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); Document dom = Dom4jFactory.getDocument(); //获得所有用户信息 List<Element> users = dom.selectNodes("//user"); out.print("<html><body>"); for(Element e :users){ String id = e.attributeValue("id"); System.out.println(id); String del = " <a href='/myServletDemo/del?id="+id+"'>删除</a>"; //System.out.println(e.attributeValue("name")+","+e.attributeValue("pwd")); out.print("用户名:"+e.attributeValue("name")+",密码:"+e.attributeValue("pwd")+del+"<br/>"); } out.print("<a href='javascript:history.go(-1);'>返回</a>"); out.print("</body></html>"); } //处理用户注册的表单请求 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); Document dom = Dom4jFactory.getDocument(); PrintWriter out = response.getWriter(); //防护,如果用户已经存在,就给前端发送换一个用户名的信息。 //xpath Node node = dom.selectSingleNode("//user[@name='"+name.trim()+"']"); if(node!=null){//用户名已经存在,不能注册 out.print("该用户名已经存在,请换一个!"); //添加一个返回的链接 out.print(" <a href='javascript:history.go(-1);'>返回</a>"); }else{//可以注册 Element root = dom.getRootElement(); Element elem = root.addElement("user"); elem.addAttribute("id", UUID.randomUUID().toString().replaceAll("-", "")); //replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 elem.addAttribute("name", name); elem.addAttribute("pwd", pwd); //存 Dom4jFactory.save(); //返回注册成功 out.print("恭喜,注册成功。"); //添加一个返回的链接 out.print(" <a href='javascript:history.go(-1);'>返回</a>"); } } }
DelServlet.java-实现删除功能:
package cn.hncu.servlet.day2; 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 org.dom4j.Document; import org.dom4j.Node; import cn.hncu.factory.Dom4jFactory; public class DelServlet extends HttpServlet { //只需要get方式就可以了。 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String delId = request.getParameter("id"); Document dom = Dom4jFactory.getDocument(); Node node = dom.selectSingleNode("//user[@id='"+delId+"']"); if(node!=null){ node.getParent().remove(node); Dom4jFactory.save(); } //重定向-继续返回当前页面 response.sendRedirect("/myServletDemo/reg"); } }
id的传递用get方式传递的,?号后面的就是id。
演示结果:
注册一个name为张三的用户:
服务器中users.xml的绝对路径:
可以看到,多了一个user标签:
显示所有的用户:(多注册几个)
如果出现重名的情况:
删除链接:?号后跟着的是用户的id
点击删除后:用户被删除。
注意一点的是:
这个服务器中的users.xml文件和之前myeclipse中的users.xml已经不同了,你注册后,只会把服务器中的users.xml文件修改,而不会去改myeclipse中的users.xml文件,所以,如果你用myeclipse再重新发布,会把你服务器中的那个文件数据全部冲掉。。。。。注意哦。