如何使用 Java Servlet、JSP 和 MySQL 编写登录和注销代码

在本教程中,我将指导您如何使用 Servlet、JSP、JDBC 和 MySQL 为小型 Java Web 应用程序实现登录和注销功能。只是简单的旧的核心 Java EE 技术。没有使用任何框架。

假设您有一个现有的 Java Web 项目,现在您希望为您的网站添加登录和注销功能。

表中的内容:

1.创建用于认证的数据库表

2. User 模型类

3. 验证码登录方式

4.代码登录页面

5.代码登录Servlet类

6.代码注销Servlet类

7. 测试登录和注销功能

 

1.创建用于认证的数据库表

在登录页面中,用户输入电子邮件和密码——因此我们需要根据数据库表(通常是用户表)中的数据验证登录信息。

确保您用于身份验证的表至少有 3 个字段:fullnameemailpassword

这是我在本教程中使用的表 users 的结构:

如果您还没有创建任何用于身份验证的表,请执行以下 MySQL 脚本来创建一个:

1
2
3
4
5
6
7
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(45) NOT NULL,
  `password` varchar(45) NOT NULL,
  `fullname` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

 

当然,如果需要,您可以向此表添加其他字段。


2. User 模型类

接下来,创建一个代表用户的普通旧 Java 对象 (POJO) 类:

1
2
3
4
5
6
7
8
9
10
11
package net.codejava;
 
public class User {
    private int id;
    private String fullname;
    private String email;
    private String password;
 
    // getters and setters are not shown for brevity   
     
}

您应该为此类的所有字段生成 getter 和 setter 方法。它们没有在上面的代码或简洁中显示。


3. 验证码登录方式

接下来,我们需要实现一个方法,将用户输入的登录信息与数据库中的数据进行对比。因此,使用以下代码创建 UserDAO 类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package net.codejava;
 
import java.sql.*;
 
public class UserDAO {
 
    public User checkLogin(String email, String password) throws SQLException,
            ClassNotFoundException {
        String jdbcURL = "jdbc:mysql://localhost:3306/bookshop";
        String dbUser = "root";
        String dbPassword = "password";
 
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(jdbcURL, dbUser, dbPassword);
        String sql = "SELECT * FROM users WHERE email = ? and password = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1, email);
        statement.setString(2, password);
 
        ResultSet result = statement.executeQuery();
 
        User user = null;
 
        if (result.next()) {
            user = new User();
            user.setFullname(result.getString("fullname"));
            user.setEmail(email);
        }
 
        connection.close();
 
        return user;
    }
}

请注意,在checkLogin()方法的开头指定的数据库连接信息。您应该根据您计算机上的 MySQL 更新 JDBC URL、用户名和密码。

如果在数据库中找到电子邮件和密码,您可以看到checkLogin()方法返回非空用户对象。否则返回null

要了解有关 Java 数据库编程的更多信息,请阅读此 JDBC 教程


4.代码登录页面

使用以下代码为登录页面 ( login.jsp ) 编写代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Bookshop Website</title>
</head>
<body>
    <div style="text-align: center">
        <h1>Admin Login</h1>
        <form action="login" method="post">
            <label for="email">Email:</label>
            <input name="email" size="30" />
            <br><br>
            <label for="password">Password:</label>
            <input type="password" name="password" size="30" />
            <br>${message}
            <br><br>           
            <button type="submit">Login</button>
        </form>
    </div>
</body>
</html>

运行时,此登录页面如下所示:

请注意,在login.jsp页面中,我们使用 EL 表达式${message}来显示从服务器发送的消息——通常是为了告诉用户登录失败。

如果要在提交表单之前验证表单中的字段,请在页面的<head>部分中添加以下脚本标签:

1
2
3
4
5
6
<script
  src="https://code.jquery.com/jquery-3.4.1.min.js"
  integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
  crossorigin="anonymous"></script>
<script type="text/javascript"
    src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.0/dist/jquery.validate.min.js"></script>

这里我们使用来自 CDN 网站的 2 个 jQuery 库(核心库和验证库)。

并在结束</html>标记之前添加以下 jQuery 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<script type="text/javascript">
 
    $(document).ready(function() {
        $("#loginForm").validate({
            rules: {
                email: {
                    required: true,
                    email: true
                },
         
                password: "required",
            },
             
            messages: {
                email: {
                    required: "Please enter email",
                    email: "Please enter a valid email address"
                },
                 
                password: "Please enter password"
            }
        });
 
    });
</script>

此脚本验证电子邮件和密码字段不为空,并且用户必须输入有效的电子邮件地址。您可以使用纯 Javascript 来验证表单的字段,但使用 jQuery 更方便。


5.代码登录Servlet类

在服务器端,创建一个 Java servlet 类来处理上面登录表单的提交。这是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package net.codejava;
 
import java.io.*;
import java.sql.SQLException;
 
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
 
@WebServlet("/login")
public class UserLoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    public UserLoginServlet() {
        super();
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String email = request.getParameter("email");
        String password = request.getParameter("password");
         
        UserDAO userDao = new UserDAO();
         
        try {
            User user = userDao.checkLogin(email, password);
            String destPage = "login.jsp";
             
            if (user != null) {
                HttpSession session = request.getSession();
                session.setAttribute("user", user);
                destPage = "home.jsp";
            else {
                String message = "Invalid email/password";
                request.setAttribute("message", message);
            }
             
            RequestDispatcher dispatcher = request.getRequestDispatcher(destPage);
            dispatcher.forward(request, response);
             
        catch (SQLException | ClassNotFoundException ex) {
            throw new ServletException(ex);
        }
    }
}

如您所见,doPost()方法处理来自客户端的登录请求。它调用UserDAO类的checkLogin()方法来根据数据库验证电子邮件和密码。

如果登录成功,它会在会话中设置一个属性来存储有关登录用户的信息,并将请求转发到管理主页:

1
2
3
4
5
if (user != null) {
    HttpSession session = request.getSession();
    session.setAttribute("user", user);
    destPage = "home.jsp";
}

要了解有关 Java 会话处理的更多信息,请阅读此Java 会话教程

如果登录失败,则在请求中将错误消息设置为属性,并再次转发到登录页面:

1
2
3
4
else {
    String message = "Invalid email/password";
    request.setAttribute("message", message);
}

您可以在此处了解有关 Java servlet 重定向的更多信息。

home.jsp页面的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Admin CPanel - Bookshop</title>
</head>
<body>
    <div style="text-align: center">
        <h1>Welcome to Bookshop Website Admin Panel</h1>
        <b>${user.fullname} (${user.email})</b>
        <br><br>
        <a href="logout">Logout</a>
    </div>
</body>
</html>

请注意,我们使用 EL 表达式${user.fullname} 显示全名,使用${user.email}显示登录用户的电子邮件。并且有一个注销链接,允许用户从网站注销。

通过阅读这篇EL 运算符摘要文章,您可以了解有关 JSP 中的 EL 运算符的更多信息。


6.代码注销Servlet类

要实现注销功能,请创建一个 Java servlet 类来处理来自客户端的注销请求,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package net.codejava;
 
import java.io.IOException;
 
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
 
@WebServlet("/logout")
public class UserLogoutServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    public UserLogoutServlet() {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession session = request.getSession(false);
        if (session != null) {
            session.removeAttribute("user");
             
            RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");
            dispatcher.forward(request, response);
        }
    }
}

如您所见,我们检查会话是否存在,删除登录功能中设置的属性用户 ,并将请求转发到登录页面。


7. 测试登录和注销功能

您可以在本教程末尾的附件部分下载示例项目进行运行和测试。假设我们在表users中有以下数据:

访问显示以下屏幕的登录页面:

尝试输入无效的电子邮件和空白密码,您将看到验证错误消息如下所示:

现在让我们输入正确的电子邮件和密码,然后单击Login,您将看到管理员主页如下所示:

您可以看到登录用户的全名和电子邮件显示在此页面上。

单击注销链接,您将看到它重定向到登录页面。

这就是如何使用 Java Servlet、JSP、JDBC 和 MySQL 实现 Java Web 应用程序的登录和注销功能。它非常简单,因此您可以轻松地添加到现有的小项目中,而无需使用任何框架。

但是,要完全保护需要登录的网站页面,您需要实施身份验证过滤器

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSPServletMySQL可以一起实现登录注册功能。 首先,需要创建一个数据库,包含用户表,其中包含用户名和密码字段。然后,使用Servlet处理用户提交的登录和注册请求,并将数据插入到数据库中。最后,使用JSP页面显示登录和注册表单,并将表单数据发送到Servlet进行处理。 具体实现步骤如下: 1. 创建一个MySQL数据库,包含用户表,其中包含用户名和密码字段。 2. 创建一个Servlet,处理用户提交的登录和注册请求。在处理登录请求时,从数据库中检索用户名和密码,并将其与用户输入的值进行比较。如果匹配,则将用户重定向到主页。否则,显示错误消息。在处理注册请求时,将用户输入的用户名和密码插入到数据库中。 3. 创建一个JSP页面,显示登录和注册表单。在表单中,用户输入用户名和密码,并将表单数据发送到Servlet进行处理。 4. 在JSP页面中,使用JSTL标签库显示错误消息和成功消息。如果用户输入的用户名或密码不正确,则显示错误消息。如果用户成功登录或注册,则显示成功消息。 5. 在JSP页面中,使用EL表达式显示用户信息。如果用户已登录,则显示用户名和注销按钮。如果用户未登录,则显示登录和注册按钮。 6. 在Servlet中,使用Session对象存储用户信息。如果用户成功登录,则将用户名存储在Session对象中。如果用户注销,则将Session对象中的用户名删除。 7. 在JSP页面中,使用EL表达式检查Session对象中是否存在用户名。如果存在,则显示用户名和注销按钮。如果不存在,则显示登录和注册按钮。 通过以上步骤,就可以使用JSPServletMySQL实现登录注册功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值