WEB连接数据库实现登录注册

一、创建数据库

#创建数据库
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>

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蔡不会编码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值