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包
相关推荐
Han.miracle1 天前
数据结构——二叉树的从前序与中序遍历序列构造二叉树
java·数据结构·学习·算法·leetcode
Le1Yu1 天前
分布式事务以及Seata(XA、AT模式)
java
寒山李白1 天前
关于Java项目构建/配置工具方式(Gradle-Groovy、Gradle-Kotlin、Maven)的区别于选择
java·kotlin·gradle·maven
无妄无望1 天前
docker学习(4)容器的生命周期与资源控制
java·学习·docker
MC丶科1 天前
【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
java·vue.js·spring boot·后端
千码君20161 天前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
夜白宋1 天前
【word多文档docx合并】
java·word
lied16636348061 天前
List导出到Excel文件
servlet·list·excel
@yanyu6661 天前
idea中配置tomcat
java·mysql·tomcat
2501_916766541 天前
【项目部署】JavaWeb、MavenJavaWeb项目部署至 Tomcat 的实现方式
java·tomcat