Web---创建Servlet的3种方式、简单的用户注册功能(2)

简介: Web---创建Servlet的3种方式、简单的用户注册功能

简单的用户注册功能:


首先,我们需要一个xml,用来存储用户的注册信息;

我们在项目的src文件夹下建立了一个user.xml文件。 image.png

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 = "&nbsp;&nbsp;&nbsp;&nbsp;<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("&nbsp;&nbsp;<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("&nbsp;&nbsp;<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为张三的用户:


image.png


服务器中users.xml的绝对路径:


image.png


可以看到,多了一个user标签:


image.png


显示所有的用户:(多注册几个)


image.png


如果出现重名的情况:


image.png


删除链接:?号后跟着的是用户的id


image.png


点击删除后:用户被删除。


image.png


注意一点的是:

这个服务器中的users.xml文件和之前myeclipse中的users.xml已经不同了,你注册后,只会把服务器中的users.xml文件修改,而不会去改myeclipse中的users.xml文件,所以,如果你用myeclipse再重新发布,会把你服务器中的那个文件数据全部冲掉。。。。。注意哦。


目录
相关文章
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
3月前
HDFS web Interfaces功能解读
HDFS web Interfaces功能解读
|
2月前
|
前端开发 API
(WEB前端编辑DWG)在线CAD如何实现图形识别功能
mxcad 提供的图形识别功能可帮助用户快速识别和提取 CAD 图纸中的各种图形,如直线、多段线、弧线、圆及图块,显著提升设计效率。此功能不仅适用于图形分类,还能进行数量统计和快速定位,减少手动操作。用户可通过 API 进行二次开发,自定义识别逻辑。具体步骤包括打开在线示例、选择识别功能、设置识别参数并开始识别。更多开发文档请关注公众号:梦想云图网页 CAD。
|
1月前
|
移动开发 前端开发 JavaScript
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
155 0
|
1月前
|
Java 应用服务中间件 Spring
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
26 0
|
1月前
|
云安全 SQL 安全
数字时代下的Web应用程序安全:漏洞扫描服务的功能与优势
在当今这个数字化时代,Web应用程序不仅是企业与用户之间互动的桥梁,更是企业展示服务、传递价值的核心平台。然而,随着技术的不断进步,Web应用程序的复杂性也在不断增加,这为恶意攻击者提供了可乘之机。安全漏洞的频发,如SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等,严重威胁着企业的数据安全、服务稳定性乃至经济利益。在这样的背景下,漏洞扫描服务作为一道重要的安全防线,显得尤为重要。本文将深入探讨漏洞扫描服务在面对Web应用程序安全问题时,所具备的功能优势。
|
1月前
|
JSON API 开发者
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
16 0
|
3月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
33 1
|
3月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
194 0
|
3月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
45 0