【JavaWeb-Servlet】编程(1)--- JavaSE+MySQL+JDBC+Servlet 实现在线考试管理系统(用户信息管理模块)
楔子:
一、网站需要实现的三个功能:
- 用户信息注册
- 用户信息查询
- 用户信息删除
二、准备工作:
1.创建用户信息表(SQL):
CREATE TABLE user (
userId int NOT NULL AUTO_INCREMENT,#用户编号
userName varchar(50) DEFAULT NULL,#用户名称
password varchar(50) DEFAULT NULL,#用户密码
sex varchar(1) DEFAULT NULL,#用户性别男或女
email varchar(50) DEFAULT NULL,#用户邮箱
PRIMARY KEY (userId)
);
在插入时,如果不给定具体用户编号,此时根据auto_increment的值递增添加
2.在src下 创建 com(包).burnyouth(包).entity(专门装实体类的包).Users(实体类)
3.在src下 创建 com(包).burnyouth(包).util(专门装工具类的包).JdbcUtil(工具类)
4.在src下 创建 com(包).burnyouth(包).dao(专门装对数据库中的数据进行增删改查等操作的类).UserDao
5.在src下 创建 com(包).burnyouth(包).controller(专门装Servlet实现类的包)
6.在web下WEB-INF下创建lib文件夹 ,存放 mysql 提供的 JDBC实现 jar 包
三、成型网站内部结构预览:

正文:
1、web下的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
UserAddServlet
com.burnyouth.controller.UserAddServlet
UserFindServlet
com.burnyouth.controller.UserFindServlet
UserDeleteServlet
com.burnyouth.controller.UserDeleteServlet
LoginServlet
com.burnyouth.controller.LoginServlet
UserAddServlet
/user/add
UserFindServlet
/user/find
UserDeleteServlet
/user/delete
LoginServlet
/login
login.html
2、进入在线考试管理系统前的登录验证界面(web下的html文件):
1)登录html(此网站的欢迎资源文件):
Title
2)登录信息输入错误后,跳转到的html:
Title
3、登录成功后,跳转到的在线考试管理系统导航页面(web下的html文件):
1)将浏览器窗口划分为三个窗口的html:
Title
2)浏览器的上窗口的html:
Title
在线考试管理系统
3)浏览器的左窗口的html:
Title
4)右窗口的"实现"由 com.burnyouth.controller.UserFindServlet 完成
4、创建新用户的页面(web下的html):
Title
5、实体类包:
com.burnyouth.entity.User(用户实体类):
package com.burnyouth.entity;
public class User {
private Integer userId;
private String userName;
private String password;
private String sex;
private String email;
public User() {
}
public User(Integer userId, String userName, String password, String sex, String email) {
this.userId = userId;
this.userName = userName;
this.password = password;
this.sex = sex;
this.email = email;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setPassword(String password) {
this.password = password;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getUserId() {
return userId;
}
public String getUserName() {
return userName;
}
public String getPassword() {
return password;
}
public String getSex() {
return sex;
}
public String getEmail() {
return email;
}
}
6、工具类包:
com.burnyouth.util.JdbcUtil(JDBC工具类):
package com.burnyouth.util;
import java.sql.*;
/**
* JDBC工具类
*/
public class JdbcUtil {
/**
* 工具类的构造方法都应该是私有的
* 因为工具类是需要频繁使用的,所以我们要避免代码的重复书写
* 将工具类方法都设为静态的,再将构造方法私有化(这样想new都new不出来),直接采用类名调用
*/
//静态代码块在类加载时执行,并且只执行一次
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private JdbcUtil(){
}
/**
* 获取数据库连接对象
* @return 连接
* @throws SQLException
*/
//因为此方法是被调用的方法,所以出现异常直接上抛就行
public static Connection getConnection () throws SQLException {
return DriverManager.getConnection("jdbc:mysql://localhost:3306/burning_youth"
, "root", "888");
}
/**
* 关闭资源
* @param connection 连接资源
* @param statement 数据库操作对象
* @param resultSet 结果集
*/
public static void close(Connection connection,Statement statement,ResultSet resultSet){
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
7、对数据库进行操作的包:
com.burnyouth.dao.UserDao(连接 mysql 数据库,完成增删改查等操作的 java 文件):
package com.burnyouth.dao;
import com.burnyouth.entity.User;
import com.burnyouth.util.JdbcUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
public UserDao() {
}
//向数据库中添加用户信息
public int add(User user) {
Connection connection = null;
PreparedStatement ps = null;
ResultSet resultSet = null;
int result = 0;
try {
connection = JdbcUtil.getConnection();
String sql = "insert into user(userName,password,sex,email)" +
"values(?,?,?,?)";
ps = connection.prepareStatement(sql);
ps.setString(1, user.getUserName());
ps.setString(2, user.getPassword());
ps.setString(3, user.getSex());
ps.setString(4, user.getEmail());
result = ps.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JdbcUtil.close(connection, ps, resultSet);
}
return result;
}
//得到数据库中的所有用户信息
public List findAll() {
Connection connection = null;
PreparedStatement ps = null;
ResultSet resultSet = null;
List userList = new ArrayList();
try {
connection = JdbcUtil.getConnection();
String sql = "select * from user";
ps = connection.prepareStatement(sql);
resultSet = ps.executeQuery();
while (resultSet.next()) {
Integer userId = resultSet.getInt("userId");
String userName = resultSet.getString("userName");
String password = resultSet.getString("password");
String sex = resultSet.getString("sex");
String email = resultSet.getString("email");
User user = new User(userId, userName, password, sex, email);
userList.add(user);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JdbcUtil.close(connection, ps, resultSet);
}
return userList;
}
//删除数据库中的用户信息
public int delete(String userId) {
Connection connection = null;
PreparedStatement ps = null;
ResultSet resultSet = null;
int result = 0;
try {
connection = JdbcUtil.getConnection();
String sql = "delete from user where userId=?";
ps = connection.prepareStatement(sql);
ps.setInt(1,Integer.valueOf(userId));
result = ps.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
JdbcUtil.close(connection,ps,resultSet);
}
return result;
}
//验证登录信息是否正确
public int login(String userName, String password) {
Connection connection = null;
PreparedStatement ps = null;
ResultSet resultSet = null;
int result = 0;
try {
connection = JdbcUtil.getConnection();
String sql = "select count(*) from user where userName=? and password=?";
ps = connection.prepareStatement(sql);
ps.setString(1,userName);
ps.setString(2,password);
resultSet = ps.executeQuery();
while (resultSet.next()) {
result = resultSet.getInt("count(*)");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
JdbcUtil.close(connection,ps,resultSet);
}
return result;
}
}
8、动态资源文件包:
1)com.burnyouth.controller.LoginServlet(实现了用户登录验证功能):
package com.burnyouth.controller;
import com.burnyouth.dao.UserDao;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName, password;
UserDao dao = new UserDao();
int result = 0;
//调用请求对象对请求体使用utf-8字符集进行重写编辑
request.setCharacterEncoding("utf-8");
//获取请求体中的参数信息
userName = request.getParameter("userName");
password = request.getParameter("password");
//调用dao.login()方法,返回1/0(代表用户输入的信息是否正确)
result = dao.login(userName,password);
//根据result的值,将不同的资源文件地址写入到响应头,交给浏览器
if (result == 1) {
//登录成功,进入“真正”的在线考试管理系统界面
response.sendRedirect("/myWeb/index.html");
} else {
//登录失败,跳转到登录失败的html
response.sendRedirect("/myWeb/login_error.html");
}
}
}
2)com.burnyouth.controller.UserAddServlet(实现了添加用户信息功能):
用户信息注册流程图:

代码:
package com.burnyouth.controller;
import com.burnyouth.dao.UserDao;
import com.burnyouth.entity.User;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
public class UserAddServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName, password, sex, email;
UserDao dao = new UserDao();
User user = null;
int result = 0;
PrintWriter out = null;
//1、调用【请求头对象】读取【请求头】参数信息---》得到用户信息
userName = request.getParameter("userName");
password = request.getParameter("password");
sex = request.getParameter("sex");
email = request.getParameter("email");
//2、调用【UserDao】将用户信息填充到INSERT命令里,并借助JDBC规范发送到数据库服务器
user = new User(null,userName,password,sex,email);
result = dao.add(user);
//3、调用【响应对象】将【处理结果】以二进制形式写入到响应体里
response.setContentType("text/html;charset=utf-8");
out = response.getWriter();
if (result == 1) {
out.print("用户信息注册成功");
} else {
out.print("用户信息注册失败");
}
}
}
3)com.burnyouth.controller.UserFindServlet(实现了查询用户信息功能):
用户信息查询流程图:

代码:
package com.burnyouth.controller;
import com.burnyouth.dao.UserDao;
import com.burnyouth.entity.User;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
public class UserFindServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserDao dao = new UserDao();
PrintWriter out = null;
//1、【调用Dao】将查询命令推送到数据库服务器上,得到所有用户信息【List】
List userList = dao.findAll();
//2、【调用响应对象】将用户信息结合标签命令以二进制形式写入到响应体
//设置响应头content-type属性
response.setContentType("text/html;charset=utf-8");
out = response.getWriter();
out.print("");
out.print("");
out.print("用户编号 ");
out.print("用户姓名 ");
out.print("用户密码 ");
out.print("用户性别 ");
out.print("用户邮箱 ");
out.print("操作 ");
out.print(" ");
//应用foreach循环,将用户信息(除第一行表数据外)与删除用户的动态资源文件链接写入到表中
for (User user : userList) {
out.print("");
out.print("" + user.getUserId() + " ");
out.print("" + user.getUserName() + " ");
out.print("****** ");
out.print("" + user.getSex() + " ");
out.print("" + user.getEmail() + " ");
out.print("" +
"删除用户 ");
out.print(" ");
}
out.print("
");
}
}
4)com.burnyouth.controller.UserDeleteServlet(实现了删除用户信息功能):
package com.burnyouth.controller;
import com.burnyouth.dao.UserDao;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
public class UserDeleteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserDao dao = new UserDao();
String userId;
int result = 0;
PrintWriter out = null;
//获取请求头中的userId参数信息
userId = request.getParameter("userId");
//调用dao类删除用户信息方法
result = dao.delete(userId);
//设置响应头content-type属性
response.setContentType("text/html;charset:utf-8");
out = response.getWriter();
//根据dao.delete()返回的结果,向响应体中写入不用的HTML命令
if (result == 1) {
//删除数据库中的信息成功
out.print("用户信息删除成功");
} else {
//删除数据库中的信息失败
out.print("用户信息删除失败");
}
}
}
相关