JavaWeb-03-Servlet-07-在线考试管理系统

1.需求

在线考试管理系统---->用户信息管理模块

2.功能实现

​ 1.用户信息注册
​ 2.用户信息查询
​ 3.用户信息删除
​ 4.用户信息更新

3.准备工作

3.1创建用户信息表(t_users.frm)

drop table if exists t_users;
create table t_users (
    userId int primary key auto_increment,#用户编号,设置为自增
    userName varchar(255),      #用户名
    passWord varchar(255),      #用户密码
    sex char(1),                #用户性别'男'or'女'
    age int,                    #用户年龄
    email varchar(255) unique   #用户邮箱,设置为唯一不可重复
);
insert into t_users(userName,passWord,sex,age,email) value('张三','111','男',20,'zhangsan@qq.com');
insert into t_users(userName,passWord,sex,age,email) value('李四','222','女',21,'lisi@qq.com');
commit;
select * from t_users;

导入数据库中:

JavaWeb-03-Servlet-07-在线考试管理系统_用户信息

3.2创建用户信息表对应实体类

在src下,创建com.tsccg.entity.Users实体类

package com.tsccg.entity;

/**
 * @Author: TSCCG
 * @Date: 2021/08/14 15:18
 * 用户信息表对应的实体类
 */
public class Users {
    private Integer userId;
    private String userName;
    private String passWord;
    private String sex;
    private String age;
    private String email;

    /**
     * 无参构造
     */
    public Users() {
    }

    /**
     * 有参构造
     * @param userId 用户编号
     * @param userName 用户名
     * @param passWord 用户密码
     * @param sex 用户性别'男'or'女'
     * @param age 用户年龄
     * @param email 用户邮箱
     */
    public Users(Integer userId, String userName, String passWord, String sex, String age, String email) {
        this.userId = userId;
        this.userName = userName;
        this.passWord = passWord;
        this.sex = sex;
        this.age = age;
        this.email = email;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

3.3编写JDBC工具类

在/web/WEB-INF目录下,创建一个文件夹,命名为lib,将MySQL驱动放进去。

在src下,创建一个配置文件JDBC.properties。把驱动名、数据库等信息都放到里面。

driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_user
user=root
password=123456

在src下,创建com.tsccg.util.JdbcUtil工具类。

使用资源绑定器获取相关信息。

package com.tsccg.util;

import java.sql.*;
import java.util.ResourceBundle;

/**
 * @Author: TSCCG
 * @Date: 2021/08/14 15:32
 * JDBC工具类
 * 1.注册驱动*
 * 2.获取连接*
 * 3.获取预编译的数据库操作对象
 * 4.执行sql
 * 5.处理查询结果集
 * 6.关闭资源*
 */
public class JdbcUtil {
    /**
     * 创建资源绑定器对象
     */
    private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("JDBC");
    //1.注册驱动
    static {
        try {
            Class.forName(BUNDLE.getString("driverName"));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    /**
     * 2.获取连接
     * @return 返回连接对象
     * @throws SQLException 将SQLException异常上抛
     */
    public static Connection connect() throws SQLException {
        return DriverManager.getConnection(BUNDLE.getString("url"),
                BUNDLE.getString("user"),BUNDLE.getString("password"));
    }
    /**
     * 6.释放资源
     * @param conn 连接对象
     * @param stmt 数据库操作对象
     * @param rs 查询结果集对象
     */
    public static void closeAll(Connection conn, Statement stmt, ResultSet rs) {
        if(rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(stmt != null) {
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

4.用户信息注册

4.1用户信息注册流程图

JavaWeb-03-Servlet-07-在线考试管理系统_用户信息_02

4.2创建前台页面

HTML文件属于静态资源文件,需要放在/web目录下。

在/web目录下新建user_add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
</head>
<body>
<form action="http://localhost:8080/MyWeb/user/add" method="GET" id="form">
    <h2 align="center">用户注册</h2>
    <table align="center">
        <!-- 用户名  -->
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="userName"></td>
        </tr>
        <!-- 密码  -->
        <tr>
            <td>密码:</td>
            <td><input type="password" name="passWord"></td>
        </tr>
        <!-- 性别  -->   
        <tr>
            <td>性别:</td>
            <td>
                <label>
                    <input type="radio" name="sex" value="男" checked="checked">男
                </label> 
                <label>
                    <input type="radio" name="sex" value="女">女
                </label>
            </td>
        </tr>
        <!-- 年龄  -->   
        <tr>
            <td>年龄:</td>
            <td><input type="text" name="age"></td>
        </tr>
        <!-- 邮箱地址  -->   
        <tr>
            <td>邮箱地址:</td>
            <td><input type="text" name="email"></td>
        </tr>
        <!-- 提交  -->
        <tr>
            <td><input type="submit" value="提交"></td>
            <td><input type="reset" value="重置"></td>
        </tr>
    </table>
</form>
</body>
</html>

JavaWeb-03-Servlet-07-在线考试管理系统_bundle_03

4.3编写JDBC类【UserDao】

这个类的主要作用就是连接数据库,对数据库中的数据进行增删查改。

package com.tsccg.com.tsccg.dao;

import com.tsccg.entity.Users;
import com.tsccg.util.JdbcUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * @Author: TSCCG
 * @Date: 2021/08/14 21:07
 */
public class UserDao {
    /**
     * 向数据库中添加用户信息
     * @param users 用户信息表对应实体类
     * @return 返回
     */
    public boolean add(Users users) {
        Connection conn = null;
        PreparedStatement ps = null;
        boolean result = false;
        try {
            //注册、获取连接对象
            conn = JdbcUtil.connect();
            //获取预编译的数据库操作对象
            String sql = "insert into t_users(userName,passWord,sex,age,email) " +
                    "value(?,?,?,?,?)";
            ps = conn.prepareStatement(sql);
            ps.setString(1,users.getUserName());
            ps.setString(2,users.getPassWord());
            ps.setString(3,users.getSex());
            ps.setString(4,users.getAge());
            ps.setString(5,users.getEmail());
            if(ps.executeUpdate() > 0) {
                result = true;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            JdbcUtil.closeAll(conn,ps,null);
        }
        return result;
    }
}

4.4编写Servlet接口实现类【UserAddServlet】

这个类的主要作用有三个:

  1. 调用【请求对象】读取请求头/请求体中的请求参数信息,也就是用户输入的信息
  2. 调用【UserDao】将用户信息放入insert命令,并借助JDBC规范发送到数据库服务器
  3. 调用【响应对象】将【处理结果】以二进制形式写入响应体中
package com.tsccg.controller;

import com.tsccg.com.tsccg.dao.UserDao;
import com.tsccg.entity.Users;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @Author: TSCCG
 * @Date: 2021/08/14 20:11
 */
public class UserAddServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通知请求对象,使用utf-8字符集对请求体内的二进制内容进行一次重新解码
        request.setCharacterEncoding("utf-8");
        insert(request,response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        insert(request,response);
    }
    
    private static void insert(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //1.调用【请求对象】读取【请求头】或【请求体】中的请求参数信息,得到用户的信息
        String userName,passWord,sex,age,email;
        UserDao dao = null;
        Users users = null;
        PrintWriter out = null;
        userName = request.getParameter("userName");
        passWord = request.getParameter("passWord");
        sex = request.getParameter("sex");
        age = request.getParameter("age");
        email = request.getParameter("email");
        //2.调用【UserDao】将用户信息放入insert命令,并借助JDBC规范发送到数据库服务器
        dao = new UserDao();
        users = new Users(null,userName,passWord,sex,age,email);
        boolean result = dao.add(users);
        //3.调用【响应对象】将【处理结果】以二进制形式写入响应体中
        response.setContentType("text/html;charset=utf-8");
        out = response.getWriter();
        out.print(result ? "注册成功":"注册失败");
    }
}

4.5测试

发布网站,开启服务器。

在地址栏请求访问用户注册页面,输入用户信息,点击提交。

如果用户信息成功写入数据库,则显示【注册成功】,反之显示【注册失败】。

JavaWeb-03-Servlet-07-在线考试管理系统_用户信息_04