• 【JAVA项目实战】【图书管理系统】用户删除功能【Servlet】+【JQuery】+【Mysql】


    🚀个人主页:欢迎访问Ali.s的首页

    ⏰ 最近更新:2022年7月31日

    ⛽ Java框架学习系列:【Spring】【SpringMVC】【Mybatis】

    🔥 Java项目实战系列:【飞机大战】【图书管理系统】

    ⛳ Java基础学习系列:【继承】【封装】【多态】

    🏆 通信仿真学习系列:【硬件】【通信】【MATLAB】

    🍄 个人简介:通信工程本硕🌈、Java程序员🚴。目前只会CURD😂

    💌 点赞 👍 收藏 💗留言 💬 都是我最大的动力💯

    在这里插入图片描述


    前言

    这里是【JAVASE】项目实战的第三节课,接着前面的用户新增功能继续做,今天做的是用户的删除功能,使用【servlet】【JQuery】【Mysql】来实现该功能。


    一、需求分析

    在前面用用户新增功能实现后,可以清楚的看到插入的用户信息,并且能够在前端页面渲染出数据效果,但是在实际的测试过程中出现了中文乱码问题,今天将完善一下中文乱码问题,并且完成用户删除功能。
    在这里插入图片描述
    下面对增加的功能进行需求分析。
    在这里插入图片描述
    当点击每条数据的删除按钮时,就是用户发送了请求,这里由于在UserServlet中都是POST请求,所以后面在点击按钮触发事件时,应将actionmethod设置为post方式。用户发送请求后controller层的Servlet就应该要处理请求,而根据MVC架构,controller需要调用service层的方法,所以将业务逻辑交给Service层进行处理,service的处理有需要对请求处理的数据与dao层的数据进行比对,dao层访问数据库信息,对请求数据操作进行校验,并对操作返回数据响应。

    二、功能实现

    dao层和service层中创建接口。这里与新增用户的功能类似,所以前面的功能实现后,这里就相对比较简单。

    1.反射机制

    这里使用反射机制来统一拿到User对象的表单信息,避免每次的增删改查都需要去获取User对象。

    private <T>  T getRequestParameterForReflect(HttpServletRequest req,Class <T> cla) throws InstantiationException, IllegalAccessException {
            T t=cla.newInstance();
            //使用反射机制获取表单信息
            Map<String, String[]> parameterMap = req.getParameterMap();
            Field[] fields = cla.getDeclaredFields();
            //对信息判空处理
            if(fields!=null && fields.length>0) {
                for (Field field : fields) {
                    String[] values = parameterMap.get(field.getName());
                    if (values==null || values.length==0){
                        continue;
                    }
                    //判断是否是数组类型
                    if (field.getType() ==String[].class){
                        //开启访问权限
                        field.setAccessible(true);
                        try {
                            field.set(t,values);
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        }
                        //关闭访问权限
                        field.setAccessible(false);
                        continue;
                    }
                    //不是数组类型
                    field.setAccessible(true);
                    try {
                        field.set(t,values[0]);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                    //关闭访问权限
                    field.setAccessible(false);
                    continue;
                }
            }
            return t;
        }
    
    • 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

    2.控制层

    为了避免代码重复,将处理的方法抽象出来,便于调用函数,使代码更加简洁。下面删除用户的方法。

     private void deleteUser(HttpServletRequest req, HttpServletResponse resp) throws IOException {
            //获取需要删除的用户的编号
            String id = req.getParameter("id");
            //通过service来进行操作
            Integer count = userService.deleteUser(Integer.parseInt(id));
            //对判断条数
            if (count>0){
                //进行重定向跳转
                resp.sendRedirect("/userServlet");
            }else{
                //删除失败
                System.out.println("删除失败……");
            }
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.业务层

    在接口中调用添加用户的方法,注意返回值为Integer,表示影响返回参数id的用户信息收到影响。

        @Override
        public Integer deleteUser(Integer id) {
            return userDao.delete(id);
        }
    
    • 1
    • 2
    • 3
    • 4

    在实现类实现所调用的接口就能完成业务层的处理。

    package com.song.bookmanagersystem.service;
    import com.song.bookmanagersystem.entity.User;
    import java.util.List;
    public interface UserService {
        //业务层删除用户
        Integer deleteUser(Integer id);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.持久层

    dao层要完成信息的查库操作,与数据库的信息进行比对,并返回响应的结果,这是删除的操作,所以返回响应的结果是否删除成功,并且要将数据作为返回值进行传递。

        @Override
        public Integer delete(Integer id) {
            QueryRunner queryRunner = DBUtils.getQueryRunner();
            String sql="delete from t_user where id= ?";
            try {
                return queryRunner.update(sql,id);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return -1;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5.乱码问题

    在新增用户信息时,当输入的字段信息为中文时,在前端页面和数据库中都有可能出现乱码问题。
    在这里插入图片描述
    针对乱码问题,我们选择在用户发送请求时,将用户输入的信息做字符集编码格式的处理,这样后面的每一步都将可以正常的操作和显示,从源头上解决乱码问题,所以在POST请求时,就设置字符编码格式 req.setCharacterEncoding("UTF-8")

     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          //设置post请求中解码的方式
            req.setCharacterEncoding("UTF-8");
           String type=req.getParameter(Constant.SERVLET_TYPE_SQLTYPE);
           if (type!=null && !"".equals(type)){
               //对请求进行判断,针对不同的请求进行不同的处理
               if(Constant.SERVLET_TYPE_SAVE.equals(type)){
                //进行添加操作
                   try {
                       saveUser(req, resp);
                   } catch (Exception e) {
                       e.printStackTrace();
                   }
               }else if (Constant.SERVLET_TYPE_UPDATE.equals(type)){
                //进行更新操作
               }else if (Constant.SERVLET_TYPE_DELETE.equals(type)){
                //进行删除操作
                   deleteUser(req,resp);
               }else if(Constant.SERVLET_TYPE_QUERY.equals(type)){
                   //进行查询操作
                   queryUser(req, resp);
               }
           }else{
               queryUser(req,resp);
           }
        }
    
    • 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

    三、功能测试

    启动服务器,让项目在服务器中运行,实现在新增的功能下测试中文的输入是否还存在乱码问题,然后在网页上进行删除用户数据的测试。
    在这里插入图片描述
    页面已经可以正常显示中文字段信息,说明中文乱码问题已经解决,下面测试删除信息的功能。
    在这里插入图片描述
    点击删除按钮后,页面再次跳转回用户信息页面,并且刚刚删除的数据信息已经不存在,在数据库中也不存在该用户信息,说明用户删功能已经完成。
    在这里插入图片描述
    在这里插入图片描述


    在这里插入图片描述

    总结

    以上就是今天要讲的内容,使用【Servlet】+【JQuery】+【Mysql】对用户删除功能进行实现,发现能成功删除数据库中的用户信息,并且能够数据返回到前端页面进行渲染,重新返回到用户信息页面,同时解决了中文乱码问题,设置字符编码格式是防止乱码的有效方法。

  • 相关阅读:
    【MySQL】区分:等值连接/自连接/自然连接/外连接 以及ON和Where使用
    vlan+链路聚合实验
    mac 通过SQLiteStudio来实时可视化查看Android Studio内的SQLite数据库
    Shell——docker启动yapi
    行业追踪,2023-10-17
    uview 1 uni-app表单 number digit 的输入框有初始化赋值后,但是校验失败
    linux 测试网络连通性方法
    Ajax异步请求的五个步骤
    【Django】REST_Framework框架——APIView类源码解析
    (附源码)springboot高校二手教材管理平台 毕业设计 231057
  • 原文地址:https://blog.csdn.net/dxcn01/article/details/126087544