基于Javaweb实现ATM机系统开发实战(五)新增用户功能实现

news2024/9/25 11:21:50

 新增用户非常简单,前端拿到数据传递给后端然后往数据库里一存就完事了~

首先我们看一下新增用户的页面:add.jsp,

 可以看到提交的页面:insert 和方式post,但是少了密码的添加,所以我们手动给他加上:

  <tr>
  <td><font size="4">密码:</font></td>
  <td><input type="text" name="pwd" class="form-control"></td>
  </tr>

所以我们需要新建一个servlet进行处理:

package com.atm.servlet;

import com.atm.pojo.User;
import com.atm.service.UserService;
import com.atm.service.impl.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

//用户数据增加
@WebServlet("/insert")
public class UserAddServlet extends HttpServlet {
    private UserService userService=new UserServiceImpl();

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        //获得参数
        String icno=request.getParameter("icno");
        String name=request.getParameter("name");
        String pwd=request.getParameter("pwd");
        String mobile=request.getParameter("mobile");
        String idcard=request.getParameter("idcard");
        double balance=0;
        if(request.getParameter("balance")!=null){
            balance=Double.parseDouble(request.getParameter("idcard"));
            User user=new User();
            user.setIcno(icno);
            user.setBalance(balance);
            user.setName(name);
            user.setPwd(pwd);
            user.setMobile(mobile);
            user.setIdcard(idcard);
        try {
            //调用业务进行数据添加
            boolean result = userService.insert(user);
            if (result){
                //跳转到列表页面显示
            response.sendRedirect("/list");
            }else {
                response.getOutputStream().print("添加失败");
            }
        }catch (Exception e){
            e.printStackTrace();
        }

        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

返回接口添加新增方法:

    //用户新增
    public boolean insert(User user)throws Exception;

实现类进行实现:

    //用户新增
    public boolean insert(User user)throws Exception{
        int num =userDao.insertUser(user);
        if(num>=1){
            return true;
        }else{
            return false;
        }
    }

数据层进行处理:

    //用户新增
    public int insertUser(User user) throws Exception{
        Connection connection= DBUtils.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("insert into user values(?,?,?,?,?,?) ");
        preparedStatement.setString(1,user.getIcno());
        preparedStatement.setString(2,user.getName());
        preparedStatement.setString(3,user.getPwd());
        preparedStatement.setString(4,user.getMobile());
        preparedStatement.setString(5,user.getIdcard());
        preparedStatement.setDouble(6,user.getBalance());
        int num = preparedStatement.executeUpdate();
        DBUtils.release(connection,preparedStatement,null);
        return num;
    }

这里代码就完成了,我们重启一下系统看看新增是否成功:

 新增成功~

但是我们的增删改查操作都是每个请求手动修改的编码,如果每个请求都要加上这一行代码,

 得累死,所以我们写一个过滤器,对所有请求进行过滤和编码修改:

package com.atm.utill;

import javax.servlet.*;
import javax.servlet.annotation.*;
import java.io.IOException;


//编码过滤器,只对POST请求有用

@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {

    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        System.out.println("请求被过滤为utf-8");
        chain.doFilter(request, response);
    }

    public void init(FilterConfig config) throws ServletException {
    }



}

然后把之前我们写的过滤方法进行注释:

 重启系统运行一下,然后进行一下增删改查的操作,

 发现过滤成功啦~

新增用户和过滤器操作就全部完成了,需要注意的是过滤器只对POST请求生效~GET请求乱码需要手动处理,不过新版本在前端已经进行处理了,所以不用管它了~

实现代码已上传~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/738731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云——网站建设:部署与发布(知识点)

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 学习目标 1.建站&#xff1a; &#xff08;1&#xff09;建站基本步骤 2.域…

导入Excel数据【EasyPoi实战系列】- 第480篇

历史文章&#xff08;文章累计480&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 【…

Docker操作镜像相关命令

[rootdocker02 ~]# docker image ##查看docker命令 docker image search 搜索镜像, 优先选官方,stars数量多&#xff08;尽量不选择第三方镜像&#xff09; 第三方镜像不支持搜索&#xff0c;特点是特别长。 官方仓库地址&#xff1a;https://hub.docker.com/ 官方仓库 官方镜像…

v-for遍历数组或者对象,渲染结构、v-bind动态设置class和style

&#xff08;一&#xff09;v-for数组变化&#xff08;增加一项&#xff0c;删除一项&#xff09;, 会更新页面吗?那么数组改变后&#xff0c;是如何更新的呢&#xff1f; 1. v-for 作用&#xff1a;可以遍历数组或者对象&#xff0c;用于渲染结构。遍历数组语法&#xff1a…

robotframework之python扩展库编写

通过对robot自动化框架的使用&#xff0c;大大方便了我们做自动化测试。但很多时候官网提供的扩展库并不能满足我们的测试要求&#xff0c;此时就需要我们编写自己的扩展库。这里以ubuntu下使用python编写自定义扩展库举例说明。 最近笔者在做物联网方面的自动化测试&#xff…

FASTADMIN联合查询 搜索

控制器中添加relationSearch开关 控制器里面添加联合查询 MODEL里面添加 js里面添加即可 可以查看数据json 搜索开启searchFileds就可以了

❤️创意网页:生日快乐!穿越奇妙时光的温暖庆祝(HTML+CSS+JS)简单好用

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

【Linux】使用git 连接到远程gitee仓库

一.创建gitee仓库 登陆到自己的gitee&#xff0c;点击新建仓库 输入仓库名称&#xff0c;注意gitee初次创建仓库时只能设置成私有的 创建后的页面是这样的&#xff0c;复制HTTPS 二.git三板斧 1.安装git 打开xshell&#xff0c;输入命令&#xff1a; yum install git 可以输入…

SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑

场景 Git/ SVN 是代码界的版本控制工具&#xff0c;那么&#xff0c;Flyway 就是一款数据库界的版本控制工具&#xff0c; 它可以记录数据库的变化记录。可能很多公司都是通过人工去维护、同步数据库脚本&#xff0c; 但经常会遇到疏忽而遗漏的情况&#xff0c;举个简单的例…

glob找不到文件而os.listdir可以

前几天遇到了一个问题&#xff0c;就是glob找不到文件而os.listdir可以 /mnt/data/datasets/abc[123]&#xff1a; ├── img_0001.jpg ├──img_0002.jpg代码 import os import glob path /mnt/data/datasets/abc[123] os.listdir(path) glob.glob(os.path.join(path, *.…

ES6: Proxy概念及用法

Proxy如其名&#xff0c; 它的作用是在对象和和对象的属性值之间设置一个代理&#xff0c;获取该对象的值或者设置该对象的值&#xff0c; 以及实例化等等多种操作&#xff0c; 都会被拦截住&#xff0c; 经过这一层我们可以统一处理&#xff0c;我们可以认为它就是“代理器” …

使用 @Autowired 为什么会被 IDEA 警告,应该怎么修改最佳?

# 问题原因 关于这个问题&#xff0c;其实答案相对统一&#xff0c;实际上用大白话说起来也容易理解。 1.初始化问题 先看一下Java初始化类的顺序&#xff1a;父类的静态字段 > 父类静态代码块 > 子类静态字段 > 子类静态代码块 > 父类成员变量 > 父类构造代码块…

前端学习——Web API (Day3)

事件流 事件流和两个阶段说明 事件捕获 事件冒泡 阻止冒泡 解绑事件 事件委托 案例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" …

day1-搜索插入位置

搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: …

flutter开发实战-底部bottomNavigationBar➕PageView

flutter开发实战-底部bottomNavigationBar tabbar在app中非常常见&#xff0c;底部BottomNavigationBar属性 一、BottomNavigationBar属性 BottomNavigationBar组件的常用属性&#xff1a; type&#xff1a;tabbar样式&#xff0c;默认为白色不显示&#xff1b;fixedColor:t…

AR眼镜:可视化声音

推荐&#xff1a;将 NSDT场景编辑器加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 音频可以包括各种各样的声音&#xff0c;从人类语音到非语音声音&#xff0c;如狗吠和警笛声。在为有听力障碍的人设计可访问的应用程序时&#xff0c;应用程序应该能够识别声音并理…

【二分查找】面试题 08.03. 魔术索引

面试题 08.03. 魔术索引 解题思路 改写递归二分查找的思路首先查找mid的值是不是mid 如果是 由于有多个解&#xff0c;那么递归搜索左半边的空间然后如果没找到&#xff0c;首先搜索左半边的空间&#xff0c;然后搜索右半边的空间 class Solution {public int res -1;privat…

mybatis-plus案例报错

报错信息: Error creating bean with name ‘dataSource’ defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Generic.class]: Bean instantiation via factory method failed; nested exception is org.springframework…

ELK 企业级日志分析系统(一)

ELK 一、ELK理论日志管理方案为什么要使用ELK完整日志系统基本特征ELK 简介ELK 的工作流程 二、ELK实验ELK Elasticsearch 集群部署ELK Logstash 部署&#xff08;在 apche节点上操作&#xff09;ELK Kiabana 部署&#xff08;在 Node1 节点上操作) 一、ELK理论 日志管理方案 …

django对数据库中的表进行重新生成

删除数据库中的表删除项目中migrations包下的初始化文件 进入到manage.py目录下执行命令python manage.py makemigrations执行完上述命令之后&#xff0c;再执行命令python manage.py migrate就可以啦 关于详细的数据表生成见博文&#xff1a;https://blog.csdn.net/David_hou…