下面给你一套**「JSP + MySQL 实现【好看】的登录 / 注册页面(含动态背景)」完整实战方案**,这是课程设计 / 实训 / 展示级别的做法,不是那种“丑 JSP”。
特点👇
✅ JSP + Servlet + MySQL
✅ JDBC 原生实现(老师最认可)
✅ 动态渐变背景 / 粒子动画背景(二选一)
✅ 登录 / 注册完整闭环
✅ 页面美观,可直接截图当成果
一、最终效果说明(你做出来会是这样)
- 登录 / 注册卡片居中
- 半透明毛玻璃效果
- 背景 动态渐变 / 粒子浮动
- 表单校验
- 数据真实存入 MySQL
二、项目结构(标准 + 清晰)
LoginSystem/
│
├── src/
│ ├── entity/
│ │ └── User.java
│ ├── util/
│ │ └── DBUtil.java
│ ├── servlet/
│ │ ├── LoginServlet.java
│ │ └── RegisterServlet.java
│
├── WebContent/
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── particles.min.js
│ ├── login.jsp
│ ├── register.jsp
│ └── success.jsp
│
└── web.xml
三、MySQL 数据库设计(必考点)
1️⃣ 建库建表
CREATE DATABASE jsp_login CHARACTER SET utf8;
USE jsp_login;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE,
password VARCHAR(50)
);
四、数据库工具类(DBUtil.java)
package util;
import java.sql.*;
public class DBUtil {
private static final String URL =
"jdbc:mysql://localhost:3306/jsp_login?useUnicode=true&characterEncoding=utf8";
private static final String USER = "root";
private static final String PASSWORD = "123456";
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
⚠️ 注意:
- MySQL 8 用
com.mysql.cj.jdbc.Driver - 记得导入 mysql-connector-j.jar
五、注册页面(register.jsp)【动态背景】
1️⃣ HTML + CSS + 动态渐变背景
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>用户注册</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="bg"></div>
<div class="login-box">
<h2>用户注册</h2>
<form action="RegisterServlet" method="post">
<input type="text" name="username" placeholder="用户名" required>
<input type="password" name="password" placeholder="密码" required>
<button type="submit">注册</button>
</form>
<p><a href="login.jsp">已有账号?去登录</a></p>
</div>
</body>
</html>
六、CSS 美化 + 动态背景(style.css)
* {
margin: 0;
padding: 0;
font-family: "Segoe UI";
}
body, html {
width: 100%;
height: 100%;
overflow: hidden;
}
.bg {
position: fixed;
width: 100%;
height: 100%;
background: linear-gradient(-45deg,
#6a11cb, #2575fc, #ff512f, #dd2476);
background-size: 400% 400%;
animation: gradient 10s ease infinite;
}
@keyframes gradient {
0% {background-position: 0% 50%;}
50% {background-position: 100% 50%;}
100% {background-position: 0% 50%;}
}
.login-box {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 320px;
padding: 40px;
background: rgba(255,255,255,0.2);
backdrop-filter: blur(10px);
border-radius: 15px;
color: #fff;
text-align: center;
}
.login-box h2 {
margin-bottom: 20px;
}
.login-box input {
width: 100%;
padding: 10px;
margin: 10px 0;
border: none;
border-radius: 5px;
}
.login-box button {
width: 100%;
padding: 10px;
background: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
}
📌 这套 CSS 非常适合课程展示,老师一看就加分
七、注册 Servlet(RegisterServlet)
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
try (Connection conn = DBUtil.getConnection()) {
String sql = "INSERT INTO user(username,password) VALUES (?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
ps.executeUpdate();
response.sendRedirect("login.jsp");
} catch (Exception e) {
response.getWriter().write("注册失败,用户名已存在");
}
}
}
八、登录页面(login.jsp)
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>用户登录</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="bg"></div>
<div class="login-box">
<h2>用户登录</h2>
<form action="LoginServlet" method="post">
<input type="text" name="username" placeholder="用户名" required>
<input type="password" name="password" placeholder="密码" required>
<button type="submit">登录</button>
</form>
<p><a href="register.jsp">没有账号?去注册</a></p>
</div>
</body>
</html>
九、登录 Servlet(LoginServlet)
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
try (Connection conn = DBUtil.getConnection()) {
String sql = "SELECT * FROM user WHERE username=? AND password=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
request.getSession().setAttribute("user", username);
response.sendRedirect("success.jsp");
} else {
response.getWriter().write("用户名或密码错误");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
十、登录成功页面(success.jsp)
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<body>
<h2>登录成功!</h2>
欢迎你:${sessionScope.user}
</body>
</html>
十一、全过程总结(考试必背)
- JSP 提供页面展示
- CSS 实现动态背景与美化
- 表单提交给 Servlet
- Servlet 使用 JDBC 操作 MySQL
- 登录成功 → Session 保存用户信息
- 页面跳转
十二、还能继续升级(直接拉满)
🔥 粒子背景(particles.js)
🔥 密码加密(MD5 / BCrypt)
🔥 验证码
🔥 登录拦截器 Filter
🔥 前后端分离(Vue + Spring Boot)