javaWeb连接数据库实现简单登陆注册功能的全过程

让我来为你详细讲解“Java Web连接数据库实现简单登录注册功能的全过程”。

准备工作

在进行 Java Web 开发之前,需要安装以下软件:

  • JDK(Java Development Kit)
  • Eclipse(开发工具)
  • MySQL(数据库管理系统)
  • Apache Tomcat(Web服务器)

创建数据库

在 MySQL 中创建一个名为 user 的数据库,并创建名为 user_info 的表。其中,user_info 表包含以下字段:

  • id - INT,主键,自动增加
  • username - VARCHAR,用户名,唯一
  • password - VARCHAR,密码
create database user;
use user;

create table user_info (
  id INT NOT NULL AUTO_INCREMENT primary key,
  username VARCHAR(50) NOT NULL UNIQUE,
  password VARCHAR(50) NOT NULL
);

创建 Java Web 项目

在 Eclipse 中创建一个新的 Dynamic Web Project,项目名为 LoginDemo

导入 JAR 包

下载 JDBC 驱动程序,将压缩包解压后得到的 mysql-connector-java-X.X.X.jar 文件拷贝到 WebContent/WEB-INF/lib 目录下,然后将其添加到 Eclipse 项目路径和 Build Path 中。

编写 HTML 页面

在 WebContent 目录下创建一个名为 index.html 的文件,用于登录或注册。其中,将登录和注册表单放在一个 HTML 文件中,根据表单提交方式不同在 form 标签中添加 action 属性来指定表单提交到不同的 Servlet。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login & Register Demo</title>
</head>
<body>
    <h1>Login & Register Demo</h1>
    <h2>Login</h2>
    <form action="LoginServlet" method="post">
        <label for="username">Username:</label>
        <input type="text" name="username" id="username"><br>
        <label for="password">Password:</label>
        <input type="password" name="password" id="password"><br>
        <input type="submit" value="Login">
    </form>
    <h2>Register</h2>
    <form action="RegisterServlet" method="post">
        <label for="username">Username:</label>
        <input type="text" name="username" id="username"><br>
        <label for="password">Password:</label>
        <input type="password" name="password" id="password"><br>
        <input type="submit" value="Register">
    </form>
</body>
</html>

编写 Servlet

登录

src 目录下创建一个名为 LoginServlet.java 的 Servlet,用于验证用户提供的登录信息是否正确。

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        // 获取表单中提交的用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            // 加载MySQL驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            // 获取数据库连接
            String url = "jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=UTF-8";
            String user = "root";//数据库用户名
            String sqlpassword = "password";//数据库密码

            conn = DriverManager.getConnection(url, user, sqlpassword);

            // 创建PreparedStatement对象,设置SQL语句并执行
            String sql = "SELECT * FROM user_info WHERE username=? AND password=?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            rs = pstmt.executeQuery();

            if(rs.next()) {
                // 如果用户验证成功,则在session中记录该用户信息
                request.getSession().setAttribute("username", username);
                // 跳转到欢迎页面
                response.sendRedirect("welcome.jsp");
            }else {
                // 用户验证失败,返回登录页面
                out.print("<script>alert('用户名或密码错误,请重新登录!')</script>");
                request.getRequestDispatcher("index.html").include(request, response);
            }
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(rs != null) rs.close();
                if(pstmt != null) pstmt.close();
                if(conn != null) conn.close();
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
    }

}

注册

src 目录下创建一个名为 RegisterServlet.java 的 Servlet,用于注册新用户。

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        // 获取表单中提交的用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        Connection conn = null;
        PreparedStatement pstmt = null;

        try {
            // 加载MySQL驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            // 获取数据库连接
            String url = "jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=UTF-8";
            String user = "root";//数据库用户名
            String sqlpassword = "password";//数据库密码

            conn = DriverManager.getConnection(url, user, sqlpassword);

            // 创建PreparedStatement对象,设置SQL语句并执行
            String sql = "INSERT INTO user_info (username, password) VALUES (?, ?)";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            pstmt.executeUpdate();

            // 注册成功,返回登录页面
            out.println("<script>alert('注册成功!请登录。')</script>");
            request.getRequestDispatcher("index.html").include(request, response);
        }catch(Exception e) {
            // 注册失败,返回注册页面
            out.println("<script>alert('注册失败!')</script>");
            request.getRequestDispatcher("index.html").include(request, response);
            e.printStackTrace();
        }finally {
            try {
                if(pstmt != null) pstmt.close();
                if(conn != null) conn.close();
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
    }

}

创建欢迎页面

在 WebContent 目录下创建一个名为 welcome.jsp 的文件,用于登录成功后的欢迎页面。在该页面中,获取用户的用户名并展示欢迎信息。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
    <h1>Welcome</h1>
    <p>Hi <%=session.getAttribute("username")%>, welcome to our website!</p>
    <p>Your account information:</p>
    <ul>
        <li>Username: <%=session.getAttribute("username")%></li>
        <li>Password: *********</li>
    </ul>
    <a href="logout.jsp">Logout</a>
</body>
</html>

创建退出登录页面

在 WebContent 目录下创建一个名为 logout.jsp 的文件,用于退出登录。在该页面中,清除 session 中的用户信息,并跳转到登录页面。

<%
    session.invalidate();//清除session
    response.sendRedirect("index.html");
%>

部署与运行

LoginDemo 项目导出为 WAR 文件,然后将 WAR 文件上传到 Apache Tomcat 的 webapps 目录下,启动 Tomcat 服务器,访问 http://localhost:8080/LoginDemo/index.html 即可进行登录或注册。

示例代码:https://github.com/Learnerzyy/LoginDemo

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javaWeb连接数据库实现简单登陆注册功能的全过程 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java编程实现swing圆形按钮实例代码

    关于“Java编程实现swing圆形按钮实例代码”的攻略,以下是一些实现步骤: 1. 创建一个新的Java项目 首先,在你的Java开发环境中,创建一个新的Java项目。 2. 导入Swing库 在Java项目中,导入Swing库,其中包括“javax.swing.*”等相关类。 3. 创建一个圆形按钮 在Java源文件中,创建一个圆形按钮。你可以使用Jav…

    Java 2023年5月19日
    00
  • Java利用哈夫曼编码实现字符串压缩

    Java利用哈夫曼编码实现字符串压缩 介绍 哈夫曼编码是一种可变长度编码,它在通信和数据压缩领域得到广泛的应用。在哈夫曼编码中,出现频率高的字符或词语将被分配短的编码,出现频率低的则分配长的编码,这样可以有效地减少数据的传输量和存储空间。 本攻略将介绍如何使用Java实现字符串的压缩和解压缩,其中包括使用哈夫曼编码来实现压缩。 步骤 以下是压缩和解压缩的完整…

    Java 2023年5月20日
    00
  • Java 动态数组的实现示例

    下面是 Java 动态数组的实现示例的完整攻略: 动态数组的定义 动态数组是指在数组长度不够时可以动态扩容的数组。在 Java 中,动态数组又被称作 ArrayList。 动态数组的实现方式 Java 中的动态数组可以通过 ArrayList 类来实现。ArrayList 中本身就包含了自动扩容的功能,可以根据需要动态增大数组的长度。 ArrayList 例…

    Java 2023年5月26日
    00
  • JavaScript实现九九乘法表的简单实例

    以下是“JavaScript实现九九乘法表的简单实例”的完整攻略。 展示九九乘法表 首先,在HTML文件中创建一个表格,用于展示九九乘法表: <table> <thead> <tr> <th>&times;</th> <th>1</th> <th>2&lt…

    Java 2023年6月15日
    00
  • 一文带你弄懂Java中线程池的原理

    一文带你弄懂Java中线程池的原理 线程池的概念 线程池是指一组预先创建好的线程,可以被程序反复使用,用于执行多个任务。线程池的好处在于可以管理线程数量、重用线程以及减少线程创建和销毁的开销。 在Java中,线程池相关的类都位于java.util.concurrent包中。 线程池的组成 线程池主要由以下几个组成部分: 线程池管理器(ThreadPoolEx…

    Java 2023年5月19日
    00
  • Java中ArrayList与顺序表的定义与实现方法

    Java中ArrayList与顺序表的定义与实现方法 什么是ArrayList与顺序表 在Java中,ArrayList与顺序表都是线性表的数据结构。简单说,线性表就是元素排成线性关系的数据结构。 ArrayList是Java官方提供的动态数组类,其底层是使用数组实现的。因为其底层采用了数组存储数据的方式,所以在插入、删除等一些操作时可能需要大量的移动元素,…

    Java 2023年5月26日
    00
  • SpringCloud之Config配置中心与Redis分布式锁详解

    SpringCloud之Config配置中心与Redis分布式锁详解 在分布式系统中,配置的统一管理以及分布式锁的实现都是非常重要的一部分。Spring Cloud提供了Config Server和Redis分布式锁这两个强大的功能来支持分布式系统的开发。本文将详细介绍Spring Cloud Config的使用和Redis分布式锁的实现方法。 一、Spri…

    Java 2023年5月20日
    00
  • 八、设置HTTP应答头

    设置HTTP应答头是Web开发中非常重要的一个过程,通过设置HTTP应答头,可以有效地控制浏览器的行为以及网站的运作。在本篇攻略中,我们将详细讲解设置HTTP应答头的步骤。 1.什么是HTTP应答头 HTTP应答头是HTTP请求中的一部分,用于告诉浏览器如何处理服务器发送的数据。HTTP应答头包含了很多有用的信息,例如文件类型、编码方式、缓存策略等。 2.设…

    Java 2023年6月16日
    00
合作推广
合作推广
分享本页
返回顶部