Java EE开发技术(Servlet整合JDBC银行管理系统-上)

目录

一、建库建表

二、创建web项目并创建包结构

三、User实体类

四、JDBCUtil工具类

五、测试

实例:基于Servlet技术实现银行管理系统

用户注册功能实现

撰写表单

撰写业务逻辑

业务逻辑校验通过第四部分撰写

服务端

dao包

效果

用户登录功能实现

撰写表单

撰写业务逻辑

服务端

dao包

效果

查询所有用户功能实现

撰写表单

撰写业务逻辑

服务端

dao包


一、建库建表

二、创建web项目并创建包结构

三、User实体类

对应user数据表,编写实体类,提供getter/setter方法,重写toString方法(生成即可)

四、JDBCUtil工具类

在com.tianshi.util包中创建JDBCutil工具类,简化JDBC开发过程

封装获取数据库连接方法如下:

java 复制代码
package com.tianshi.util;

import java.sql.*;

/*
开发步骤:
* 1.私有化构造方法,防止实例化
* 2.提供公共的静态方法,可以通过类名直接调用
*
* 工具方法有两个:
* 1.获取数据库连接对象:getConnection()
* 2.释放资源:close()
*/
public class JDBCUtil {
    private JDBCUtil() {}//私有化构造方法,防止实例化
    //获取数据库连接对象
    public static Connection getConnection() {
        //外置生命Connection对象
        Connection conn = null;
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");//加载数据库驱动
            //指定连接数据库的url 用户名 密码
            String url = "jdbc:mysql://127.0.0.1:3306/bank3?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC";
            String user = "root";
            String password = "123456";//获取连接对象赋值给conn
            conn = DriverManager.getConnection(url, user, password);
        }catch(Exception e){
            e.printStackTrace();
        }
        return conn;
    }
    //释放资源
    public static void close(ResultSet rs, PreparedStatement ps, Connection conn){
        try {
            if (ps != null) ps.close();
            if (rs != null) rs.close();
            if (conn != null) conn.close();
        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            rs = null;
            ps = null;
            conn = null;
        }

    }
}

五、测试

java 复制代码
package com.tianshi.test;

import com.tianshi.util.JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/*
* 测试JDBCUtil类是否正常
* 业务需求:查询id为1的用户信息
*/
public class testJDBCUtil {
    public static void main(String[] args) {
        //声明对象
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            //1.获取数据库连接
            conn = JDBCUtil.getConnection();
            //2.传输sql语句
            ps = conn.prepareStatement("SELECT * from User WHERE ID = ?");
            ps.setInt(1,1);//因为id是int类型,所以调用setInt方法
            //3.执行sql语句
            rs = ps.executeQuery();
            //4.处理结果集
            while(rs.next()){
                //获取当前便利的数据
                int id = rs.getInt("id");
                String name = rs.getString("username");
                String password = rs.getString("password");
                System.out.println(id+","+name+","+password);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            //5.释放资源
            JDBCUtil.close(rs,ps,conn);
        }
    }
}

++注意jar包版本与Mysql的对应关系,版本不同连接方法有区别,低版本这样写:++

Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动

//指定连接数据库的url 用户名 密码

String url = "jdbc:mysql://127.0.0.1:3306/bank3?useUnicode=true&characterEncoding=utf-8&useSSL=false";

实例:基于Servlet技术实现银行管理系统

用户注册功能实现

  • 在项目web目录下创建regist.jsp注册页面,编写表单,要求包含注册信息(用户名、密码、确认密码、注册按钮)
  • 在src目录下创建com.tianshi.web包
  • 在com.tianshi.web包下创建RegistServlet类,映射请求路径为/regist,实现注册功能
  1. 获取注册表单请求参数;

  2. 校验参数非空,如参数为空则直接响应"注册数据不能为空!"提示信息;

  3. 校验两次密码是否一致,如不一致则直接响应"两次密码不一致!"提示信息;

  4. 参数校验通过,则编写JDBC代码实现用户注册数据插入mysql数据库;

  5. 注册成功后,请求重定向到登录页面

撰写表单

撰写业务逻辑

trim()会移除字符串两端的空格,进行校验时使用

java 复制代码
package com.tianshi.servlet;

import com.tianshi.service.UserService;
import com.tianshi.service.UserServiceImpl;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/regist")
public class RegistServlet extends HttpServlet {
    //创建service对象
    private UserService service = new UserServiceImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // GET请求跳转到注册页面
        resp.sendRedirect(req.getContextPath() + "/regist.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 0、设置请求、响应的编码-防止中文乱码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");

        // 1、获取注册表单请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("password1");
        String password2 = req.getParameter("password2");
        System.out.println("请求参数:"+username+","+password+","+password2);
        // 2、参数校验
        if(username==null||username.trim().equals("")||password==null||password.trim().equals("")||password2==null||password2.trim().equals("")){
            resp.getWriter().write("不能为空");
            return;
        }
        if(!password.equals(password2)){
            resp.getWriter().write("两次密码不一致");
            return;
        }
        //3、
        boolean flag = service.regist(username,password);
        if(flag){
            //4、数据保存成功,则创建成功--重定向
            resp.sendRedirect(req.getContextPath()+"/login.jsp");
        }else{
            resp.getWriter().write("注册失败!");
        }
    }
}

业务逻辑校验通过第四部分撰写

++注意:搞清楚业务逻辑的主线,抓住主干对分支进行完善,而不是先写服务端自主定义的函数++

服务端

一般来说先,根据面现象对象编程的思想,先写接口,不关心具体怎么实现,但是编译器可以自动生成,所以依次建立两个文件在service包下即可,使用接口后点击让编译器自动在UserService中生成方法,本质是多态,和下面的同步创建

dao包

dao包中封装了对数据储存系统的访问操作,用于隔离数据的变化,因此数据在数据库的插入操作要在这里实现,和上面的同步创建

效果

++成功跳转到下一个逻辑,不成功如下++

用户登录功能实现

  • 在项目web包下创建login.jsp页面,编写表单,包含用户信息(用户名、密码、登录按钮)
  • 在com.tianshi.web包下创建LoginServlet类,映射请求路径为/login,实现登录功能
  1. 获取登录表单请求参数;
  2. 校验参数非空,如参数为空则直接响应"登录用户信息不能为空!"提示信息;
  3. 参数校验通过,则编写JDBC代码实现根据用户名和密码查询用户信息;
  4. 如步骤(3)未查询到数据,则说明用户信息不正确,通过请求转发到login.jsp登录页面;
  5. 如步骤(3)查询到数据,则说明用户信息正确,通过请求重定向到index.jsp系统首页。

撰写表单

撰写业务逻辑

服务端
dao包
效果

++成功跳转到下一个逻辑,不成功重定向到登录页面++

查询所有用户功能实现

在项目web目录下index.jsp首页添加超链接按钮,点击按钮后向/showUsers发起请求

在com.tianshi.service包下创建ShowUsersServlet类,实现查询所有用户信息功能,要求将所有用户信息显示到浏览器网页中。

  1. 编写JDBC代码实现查询所有用户信息
  2. 遍历结果集,获取用户信息
  3. 将用户信息显示到浏览器网页中

撰写表单

撰写业务逻辑

服务端
dao包
相关推荐
侠客行03172 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪2 小时前
深入浅出LangChain4J
java·langchain·llm
老毛肚4 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎5 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Yvonne爱编码5 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚5 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂5 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
fuquxiaoguang5 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
琹箐5 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
__WanG5 小时前
JavaTuples 库分析
java