一、创建数据库
#创建数据库
CREATE DATABASE mydb;
#判断存在即删除数据库
drop database if exists mydb;
#使用数据库
use mydb;
#创建表
CREATE TABLE user(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(24),
password VARCHAR(64)
);
INSERT INTO user(name,password) VALUES('小美','666');
INSERT INTO user(name,password) VALUES('张三','777');
INSERT INTO user(name,password) VALUES('李四','888');
二、创建项目
Login.java
package com.cyh.bean;
// 定义 UserLogin 类
public class UserLogin {
// 重写 toString 方法,用于输出对象的信息
@Override
public String toString() {
return "UserLogin{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
// 定义私有属性 id
private int id;
// 定义私有属性 name
private String name;
// 定义私有属性 password
private String password;
// 获取 id 属性值的方法
public int getId() {
return id;
}
// 设置 id 属性值的方法
public void setId(int id) {
this.id = id;
}
// 获取 name 属性值的方法
public String getName() {
return name;
}
// 设置 name 属性值的方法
public void setName(String name) {
this.name = name;
}
// 获取 password 属性值的方法
public String getPassword() {
return password;
}
// 设置 password 属性值的方法
public void setPassword(String password) {
this.password = password;
}
}
UserDaoImpl.java
package com.cyh.dao.impl;
import com.cyh.bean.UserLogin;
import com.cyh.dao.UserDao;
import com.cyh.util.JdbcUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class UserDaoImpl implements UserDao {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
boolean bo = false;
//登录方法,返回用户信息
@Override
public UserLogin login(String username, String password) {
UserLogin login = null;
con = JdbcUtil.getCon(); //获取数据库连接
if (con != null) {
// 判断数据库是否连接成功
System.out.println("数据库连接成功~");
String sql = "select * from user where name = ? and password = ?";
try {
ps = con.prepareStatement(sql); //创建PreparedStatement对象
ps.setString(1, username); //设置SQL参数
ps.setString(2, password);
rs = ps.executeQuery(); //执行查询
// 解析结果集
while (rs.next()) {
login = new UserLogin(); //创建UserLogin对象
login.setId(rs.getInt("id")); //设置UserLogin对象属性
login.setName(rs.getString("name"));
login.setPassword(rs.getString("password"));
}
} catch (Exception e) {
e.printStackTrace(); //打印异常信息
} finally {
JdbcUtil.close(rs, ps, con); //关闭数据库资源
}
} else {
System.out.println("数据库连接失败!");
}
return login; //返回UserLogin对象
}
//判断用户是否存在
@Override
public boolean Exists(String username) {
con = JdbcUtil.getCon(); //获取数据库连接
if (con != null) {
System.out.println("数据库连接成功~"); //判断数据库是否连接成功
String sql = "select * from user where name = ? ";
try {
ps = con.prepareStatement(sql); //创建PreparedStatement对象
ps.setString(1, username); //设置SQL参数
rs = ps.executeQuery(); //执行查询
while (rs.next()) {
// 如果有数据,bo为true,结束循环
bo = true;
break;
}
} catch (Exception e) {
e.printStackTrace(); //打印异常信息
} finally {
JdbcUtil.close(rs, ps, con); //关闭数据库资源
}
} else {
System.out.println("数据库连接失败!");
}
return bo; //返回boolean值,判断是否有这个用户
}
//注册换回bo注册成功
@Override
public boolean enroll(String username, String password) {
// 如果用户名不存在
if (!Exists(username)) {
// 获得数据库连接
con = JdbcUtil.getCon();
if (con != null) {
// 如果数据库连接成功,打印一条消息
System.out.println("数据库连接成功!");
// 定义 SQL 语句,插入用户名和密码到 user 表中
String sql = "insert into user(name,password) values (?,?)";
try {
// 准备 SQL 语句
ps = con.prepareStatement(sql);
// 设置 SQL 语句的第一个参数为用户名
ps.setString(1, username);
// 设置 SQL 语句的第二个参数为密码
ps.setString(2, password);
// 执行 SQL 语句,返回受影响的行数
int exe = ps.executeUpdate();
if (exe > 0) {
// 如果受影响的行数大于 0,表示插入成功,设置返回值为 true
bo = true;
}
} catch (Exception e) {
// 如果发生异常,打印异常堆栈信息
e.printStackTrace();
} finally {
// 关闭数据库连接和 SQL 语句
JdbcUtil.close(ps, con);
}
} else {
// 如果数据库连接失败,打印一条消息
System.out.println("数据库连接失败!");
}
}
// 返回插入结果,如果插入成功返回 true,否则返回 false
return bo;
}
}
UserDao.java
package com.cyh.dao;
import com.cyh.bean.UserLogin;
public interface UserDao {
/**
* @param username 用户名
* @param password 密码
* @return UserLogin UserLogin
*/
UserLogin login(String username, String password);
/**
* 判断用户存不存在
*
* @param username 用户名
* @return true 用户存在 false 用户不存在
*/
boolean Exists(String username);
/**
* @param username 用户名
* @param password 密码
* @return true 注册成功 false 注册失败
*/
boolean enroll(String username, String password);
}
Enroll.java
package com.cyh.serviet;
import com.cyh.dao.impl.UserDaoImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Enroll extends HttpServlet {
// 处理 GET 请求
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 调用 doPost() 方法
doPost(req, resp);
}
// 处理 POST 请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置请求编码为 UTF-8
req.setCharacterEncoding("utf-8");
// 设置响应内容类型为文本 HTML,编码为 UTF-8
resp.setContentType("text/html;charset=utf-8");
// 从请求参数中获取用户名和密码
String name = req.getParameter("username");
String password = req.getParameter("password");
// 创建 UserDaoImpl 对象
UserDaoImpl userDao = new UserDaoImpl();
// 查询用户名是否已存在
boolean exists = userDao.Exists(name);
// 如果用户名不存在,插入新的用户名和密码到数据库中
boolean enroll = userDao.enroll(name, password);
if (exists) {
// 如果用户名已存在,重定向到 exist.jsp 页面
resp.sendRedirect("exist.jsp");
} else if (enroll) {
// 如果插入成功,重定向到 succeed.jsp 页面
resp.sendRedirect("succeed.jsp");
}
}
}
Login.java
package com.cyh.serviet;
import com.cyh.dao.impl.UserDaoImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Login extends HttpServlet {
// 处理 GET 请求
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 调用 doPost() 方法
doPost(req, resp);
}
// 处理 POST 请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置请求编码和响应编码为 UTF-8
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
// 设置响应内容类型为文本 HTML,编码为 UTF-8
resp.setContentType("text/html;charset=utf-8");
// 从请求参数中获取用户名和密码
String user = req.getParameter("username");
String pass = req.getParameter("password");
// 创建 UserDaoImpl 对象
UserDaoImpl userDao = new UserDaoImpl();
// 如果用户名和密码匹配,重定向到 home.jsp 页面
if (userDao.login(user, pass) != null) {
resp.sendRedirect("home.jsp");
} else if (!userDao.Exists(user)) {
// 如果用户名不存在,重定向到 mistake.jsp 页面
resp.sendRedirect("mistake.jsp");
}
}
}
JdbcUtil.java
package com.cyh.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JdbcUtil {
// JDBC 驱动和连接信息
private static String driver = "com.mysql.cj.jdbc.Driver"; // JDBC 驱动
private static String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC"; // 数据库连接 URL
private static String username = "root"; // 数据库用户名
private static String password = "root"; // 数据库密码
private static Connection con = null; // 数据库连接对象
// 获取数据库连接对象的方法
public static Connection getCon() {
try {
// 加载 JDBC 驱动
Class.forName(driver);
// 获取数据库连接对象
con = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return con; // 返回数据库连接对象
}
// 释放数据库资源(ResultSet、PreparedStatement、Connection)
public static void close(ResultSet rs, PreparedStatement ps, Connection con) {
try {
if (rs != null) {
rs.close(); // 关闭 ResultSet 对象
System.out.println("资源已经释放");
}
if (ps != null) {
ps.close(); // 关闭 PreparedStatement 对象
System.out.println("资源已经释放");
}
if (con != null) {
con.close(); // 关闭 Connection 对象
System.out.println("资源已经释放");
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 释放数据库资源(PreparedStatement、Connection)
public static void close(PreparedStatement ps, Connection con) {
try {
if (ps != null) {
ps.close(); // 关闭 PreparedStatement 对象
System.out.println("资源已经释放");
}
if (con != null) {
con.close(); // 关闭 Connection 对象
System.out.println("资源已经释放");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.cyh.serviet.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>enroll</servlet-name>
<servlet-class>com.cyh.serviet.Enroll</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>enroll</servlet-name>
<url-pattern>/enroll</url-pattern>
</servlet-mapping>
</web-app>
exist.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/2/19
Time: 15:53
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户存在</title>
</head>
<body>
<form action="login.jsp" method="post">
<h2>用户存在</h2>
<a><input type="submit" value="返回上一页"></a>
</form>
</body>
</html>
enroll.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/2/19
Time: 14:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册</title>
</head>
<body>
<form action="enroll" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
<a><input type="submit" value="注册"></a>
</form>
</body>
</html>
home.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/2/19
Time: 15:17
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主页</title>
</head>
<body>
<a>欢迎</a>
</body>
</html>
index.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/2/19
Time: 15:22
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login.jsp">
<input type="submit" value="欢迎">
</form>
</body>
</html>
login.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/2/18
Time: 10:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="login" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
<a><input type="submit" value="登录"></a>
</form>
<form action="enroll.jsp" method="post">
<a><input type="submit" value="注册"></a>
</form>
</body>
</html>
mistake.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/2/19
Time: 14:46
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>错误</title>
</head>
<body>
<form action="login.jsp">
<h2>账号或者密码错误哦</h2>
<a><input type="submit" value="返回上一页"></a>
</form>
</body>
</html>
succeed.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/2/19
Time: 15:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>成功</title>
</head>
<body>
<form action="login.jsp" method="post">
<h2>注册成功</h2>
<a><input type="submit" value="返回上一个页面"></a>
</form>
</body>
</html>