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再重新发布,会把你服务器中的那个文件数据全部冲掉。。。。。注意哦。


目录
相关文章
|
16天前
HDFS web Interfaces功能解读
HDFS web Interfaces功能解读
|
15天前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
18 1
|
15天前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
13 0
|
21天前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
27 0
|
30天前
|
JavaScript 前端开发 应用服务中间件
【qkl】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
【区块链】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
|
2月前
|
移动开发 小程序 JavaScript
跨端技术问题之转Web运行时的“框架”模块主要负责什么功能
跨端技术问题之转Web运行时的“框架”模块主要负责什么功能
|
3月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
77 10
|
3月前
|
缓存 负载均衡 安全
Servlet与JSP在Java Web应用中的性能调优策略
【6月更文挑战第23天】在Java Web中,Servlet和JSP调优至关重要,以应对高并发和复杂业务带来的性能挑战。优化包括Servlet复用、线程安全、数据库连接池,以及JSP的编译优化、使用JSTL、页面缓存和静态内容分离。全局优化涉及负载均衡、异步处理和缓存策略。通过这些实践,开发者能提升应用响应速度和吞吐量,确保高负载下的稳定运行。
56 7
|
2月前
|
人工智能 前端开发 API
基于Web Speech API给AI语言模型加上语音功能,距离MOSS又近了一步
基于Web Speech API给AI语言模型加上语音功能,距离MOSS又近了一步
45 0
|
13天前
|
数据库 开发者 Python
web应用开发
【9月更文挑战第1天】web应用开发
33 1