当前位置: 首页 > news >正文

Java实现MySQL用户登录注册系统

一、实验目的

掌握 JDBC 连接 MySQL 数据库的方法

实现用户注册与登录功能及完整跳转逻辑

学习 JSP 页面与 Java 后端的交互方式

二、实验环境

开发工具:Eclipse IDE for Java EE Developers 

数据库:MySQL 8.0.43

JDK 版本:JDK 24.0.2

数据库驱动:mysql-connector-j-9.5.0.jar

服务器:Tomcat 9.0.109

三、项目结构

DBUtil.java         // 数据库连接工具类
User.java           // 用户实体类

RegisterServlet.java // 注册处理Servlet
LoginServlet.java   // 登录处理Servlet

index.jsp                   // 首页(登录页)
register.jsp                // 注册页面
success.jsp              // 登录成功页面
error.jsp                   // 错误提示页面

mysql-connector-j-9.5.0.jar // 数据库驱动

四、实验步骤与代码实现

1. 数据库准备

启动MySQL服务:

在可视化工具Navicat Premium Lite 17中创建数据库和用户表并插入测试用例:

CREATE DATABASE userdb;
USE userdb;CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(50) NOT NULL,email VARCHAR(100)
);
INSERT INTO users (username, password, email) 
VALUES 
('test1', '123456', 'test1@example.com'),
('test2', 'abc123', 'test2@example.com'),
('test3', 'qwerty', 'test3@example.com');

结果如下:

2. 数据库连接工具类(DBUtil.java)

package com.example;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DBUtil {// 数据库连接信息Private static final String URL = "jdbc:mysql://localhost:3306/userdb?useSSL=false&serverTimezone=UTC";private static final String USER = "root";private static final String PASSWORD = "123456";// 获取数据库连接public static Connection getConnection() throws SQLException {try {// 加载驱动Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}return DriverManager.getConnection(URL, USER, PASSWORD);}}

3. 用户实体类(User.java)

package com.example;public class User {private int id;private String username;private String password;private String email;// 构造方法public User() {}public User(String username, String password, String email) {this.username = username;this.password = password;this.email = email;}// getter和setter方法public int getId() { return id; }public void setId(int id) { this.id = id; }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 getEmail() { return email; }public void setEmail(String email) { this.email = email; }}

4. 登录处理 Servlet(LoginServlet.java)

package com.example;import java.io.IOException;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;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 jakarta.servlet.http.HttpSession;@WebServlet("/login")public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取表单数据String username = request.getParameter("username");String password = request.getParameter("password");Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {// 连接数据库conn = DBUtil.getConnection();// 查询用户String sql = "SELECT * FROM users WHERE username = ? AND password = ?";pstmt = conn.prepareStatement(sql);pstmt.setString(1, username);pstmt.setString(2, password);rs = pstmt.executeQuery();if (rs.next()) {// 登录成功,创建用户对象User user = new User();user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setEmail(rs.getString("email"));// 将用户信息存入SessionHttpSession session = request.getSession();session.setAttribute("user", user);// 跳转到成功页面response.sendRedirect("success.jsp");} else {// 登录失败,跳转错误页面request.setAttribute("errorMsg", "用户名或密码错误");request.getRequestDispatcher("error.jsp").forward(request, response);}} catch (SQLException e) {e.printStackTrace();request.setAttribute("errorMsg", "数据库操作失败:" + e.getMessage());request.getRequestDispatcher("error.jsp").forward(request, response);} finally {// 关闭资源try {if (rs != null) rs.close();if (pstmt != null) pstmt.close();if (conn != null) conn.close();} catch (SQLException e) {e.printStackTrace();}}}}

5. 注册处理 Servlet(RegisterServlet.java)

package com.example;import java.io.IOException;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;@WebServlet("/register")public class RegisterServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 设置请求编码request.setCharacterEncoding("UTF-8");// 获取表单数据String username = request.getParameter("username");String password = request.getParameter("password");String email = request.getParameter("email");Connection conn = null;PreparedStatement pstmt = null;try {// 连接数据库conn = DBUtil.getConnection();// 检查用户名是否已存在String checkSql = "SELECT * FROM users WHERE username = ?";pstmt = conn.prepareStatement(checkSql);pstmt.setString(1, username);if (pstmt.executeQuery().next()) {request.setAttribute("errorMsg", "用户名已存在");request.getRequestDispatcher("register.jsp").forward(request, response);return;}// 插入新用户String insertSql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";pstmt = conn.prepareStatement(insertSql);pstmt.setString(1, username);pstmt.setString(2, password);pstmt.setString(3, email);int rows = pstmt.executeUpdate();if (rows > 0) {// 注册成功,跳转到登录页并提示request.setAttribute("msg", "注册成功,请登录");request.getRequestDispatcher("index.jsp").forward(request, response);} else {request.setAttribute("errorMsg", "注册失败,请重试");request.getRequestDispatcher("register.jsp").forward(request, response);}} catch (SQLException e) {e.printStackTrace();request.setAttribute("errorMsg", "数据库操作失败:" + e.getMessage());request.getRequestDispatcher("register.jsp").forward(request, response);} finally {// 关闭资源try {if (pstmt != null) pstmt.close();if (conn != null) conn.close();} catch (SQLException e) {e.printStackTrace();}}}}

6. 登录页面(index.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>用户登录</title></head><body><h2>用户登录</h2><%-- 显示注册成功提示 --%><% if (request.getAttribute("msg") != null) { %><p style="color: green;"><%= request.getAttribute("msg") %></p><% } %><form action="login" method="post"><div><label>用户名:</label><input type="text" name="username" required></div><br><div><label>密码:</label><input type="password" name="password" required></div><br><div><input type="submit" value="登录"></div></form><p>还没有账号?<a href="register.jsp">立即注册</a></p></body></html>

7. 注册页面(register.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>用户注册</title></head><body><h2>用户注册</h2><%-- 显示错误信息 --%><% if (request.getAttribute("errorMsg") != null) { %><p style="color: red;"><%= request.getAttribute("errorMsg") %></p><% } %><form action="register" method="post"><div><label>用户名:</label><input type="text" name="username" required></div><br><div><label>密码:</label><input type="password" name="password" required></div><br><div><label>邮箱:</label><input type="email" name="email"></div><br><div><input type="submit" value="注册"></div></form><p>已有账号?<a href="index.jsp">返回登录</a></p></body></html>

8. 登录成功页面(success.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="com.example.User"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>登录成功</title></head><body><%// 从Session获取用户信息User user = (User) session.getAttribute("user");if (user == null) {// 如果未登录,重定向到登录页response.sendRedirect("index.jsp");return;}%><h2>登录成功!</h2><p>欢迎您,<%= user.getUsername() %>!</p><p>您的用户ID:<%= user.getId() %></p><p>您的邮箱:<%= user.getEmail() != null ? user.getEmail() : "未设置" %></p><p><a href="index.jsp?action=logout">退出登录</a></p></body></html>

9. 错误提示页面(error.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>操作错误</title></head><body><h2>操作失败</h2><p style="color: red;"><%= request.getAttribute("errorMsg") != null ? request.getAttribute("errorMsg") : "未知错误" %></p><p><a href="javascript:history.back()">返回上一页</a></p><p><a href="index.jsp">返回登录页</a></p></body></html>

五、系统功能说明及其验证

注册流程:

访问 register.jsp 填写注册信息

测试用例:

用户名:test01

密码:123

邮箱:aaa@test.com

提交到 RegisterServlet 处理

验证用户名是否存在,不存在则创建新用户

注册成功后跳转至登录页,失败则返回注册页提示错误

用户test01尚未注册过,所以注册成功后跳转到登录页.

如图:数据库中已保存测试用例test01的信息

登录流程:

访问 index.jsp 填写登录信息

提交到 LoginServlet 处理

验证用户名和密码,正确则将用户信息存入 Session

登录成功跳转至 success.jsp,失败则显示错误信息

如图:test01用例登录成功

如图:若输错密码,则登录失败.

六、实验总结

成功实现了基于 JDBC 的用户登录注册功能,掌握了数据库连接与操作方法

理解了 Servlet 与 JSP 的交互方式,学会了使用请求转发和重定向

完成了登录与注册之间的完整跳转逻辑,增强了用户体验

http://www.dtcms.com/a/610474.html

相关文章:

  • 三门峡网站开发重庆颐众达网站
  • 解构智慧养老:当科技成为银发族的“隐形守护者”
  • 看不见的核安全:核控制系统如何降低测试风险?
  • 物联网 - MQTT、EMQX、Broker
  • 什么是企业网站重庆建设工程信息网官网加密锁安装驱动
  • 20251114 DensePose深度姿势图像处理(简单易用)
  • 网站开发的调研wordpress写了文章打不开
  • Java_泛型的继承和通配符
  • 如何在上线后出现重大故障时进行应急响应
  • 什么是布隆过滤器?如何解决高并发缓存穿透问题?
  • 可以做微信推送的网站wordpress模板 美容
  • 石家庄做网站排名手机版商城网站都有哪 些功能
  • window平台使用lama_factory Qlora微调qwen2.5-3B-instruct实践
  • 基于野火stm32f407实现多任务动态创建
  • C语言--详解--指针--下
  • Oracle查看正在rebuild online的索引
  • Odoo 19版 odoo.conf 配置参数概览
  • 做资源网站需要什么四川公共资源交易信息网
  • 企业网站营销典型案例wordpress作者排行
  • Bootstrap5 进度条
  • 鸿蒙Cordova插件架构与OnsenUI组件适配机制深度解析
  • 前端性能问题分析
  • wdcp怎么上传做好的网站俄罗斯外贸网站
  • 网站设计师工资一般多少北京海淀区网络科技有限公司
  • c++错误<RC Condition =“‘%(ResourceCompile.ExcludedFromBuild)‘!=‘true‘“
  • 《中医基础理论》- 2.哲学基础之藏象学说-肝系统详解
  • 快速建立平台网站开发网站模板设计如何将网站转成小程序
  • Pydantic Output Parser in LangChain
  • 临海企业网站建设公司青岛网站制作套餐
  • 逻辑回归:从基础理论到实践应用的全方位解读