Java进阶-基于Servlet和JSP的登录功能实现

在 Web 开发中,用户登录功能是非常常见的模块之一。本文将通过使用 Java Servlet 和 JSP 实现一个简单的用户登录功能,展示如何创建登录页面、处理用户登录请求,并使用数据库验证用户信息。还将介绍如何在 IntelliJ IDEA 中创建 Servlet 项目,引入 MySQL 连接器,并将 login.jsp 设置为项目的默认主页。


一、开发目标

1. 开发环境

  • 开发工具: IntelliJ IDEA
  • 开发语言: Java
  • Web 容器: Apache Tomcat
  • 数据库: MySQL
  • JDK 版本: JDK 8 或以上
  • 依赖管理: Maven

2. 目标功能

实现用户在login.jsp输入账号密码后跳转到result.jsp的结果页,并提示登录是否成功。

3. 目标项目结构

```css
servlet-study/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   ├── com/example/LoginServlet.java
│   │   │   └── com/example/utils/DBUtil.java
│   │   └── resources/
│   │       └── db.properties
├── webapp/
│   ├── login.jsp
│   ├── result.jsp
│   └── WEB-INF/
│       └── web.xml
└── pom.xml

```

二、创建 Servlet JSP 项目

1. 创建 Maven 项目

打开 IntelliJ IDEA,选择 New Project,填写项目名称,选择 Maven,点击 Create

在这里插入图片描述

File 菜单栏里选择 Project Structure

在这里插入图片描述

Project Settings 选择 Modules,点击上方加号,新增一个 Web 模块。

在这里插入图片描述
点击 OK
在这里插入图片描述
创建结果如图:

在这里插入图片描述

2. 配置 Tomcat 服务器

启动按钮旁边,点击 Edit Configurations

在这里插入图片描述

添加 Tomcat Server > Local

在这里插入图片描述

如果下方有红色提示,请点击 Fix

在这里插入图片描述
Project Settings 选择 Artifacts,添加 Web Application Exploded,选择 From Modules

在这里插入图片描述
后面全部点击 OK
在这里插入图片描述

回到 Deployment 配置,将 Application context 的路径设置为 /

在这里插入图片描述

3. 引入 MySQL 连接器依赖

pom.xml 中添加以下依赖:

```xml

    
        mysql
        mysql-connector-java
        8.0.28
    


```

右键点击项目根目录,选择 Maven > Reload Project 更新依赖。

在这里插入图片描述
安装成功如图:

在这里插入图片描述


三、配置数据库连接与表结构

1. 创建数据库与用户表

创建 servlet_study 数据库,新建 users 表。

```sql
CREATE DATABASE IF NOT EXISTS servlet_study DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

USE servlet_study;

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO users (username, password) VALUES ('admin', 'root');

```

在这里插入图片描述

2. 配置数据库工具类 (DBUtil.java)

java 目录下创建 com > example > utils 文件夹下工具类文件 DBUtil.java
在这里插入图片描述
在这里插入图片描述

编写 DBUtil.java 文件。

```java
package com.example.utils;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class DBUtil {
    private static String url;
    private static String username;
    private static String password;
    private static String driverClassName;

    static {
        try (InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties")) {
            Properties properties = new Properties();
            properties.load(input);
            url = properties.getProperty("jdbc.url");
            username = properties.getProperty("jdbc.username");
            password = properties.getProperty("jdbc.password");
            driverClassName = properties.getProperty("jdbc.driverClassName");
            Class.forName(driverClassName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, username, password);
    }
}

```

3. 创建数据库配置文件 (db.properties)

src > main > java > resources 目录下创建数据库配置文件 db.properties

在这里插入图片描述

文件内容:

```bash
jdbc.url=jdbc:mysql://localhost:3306/servlet_study?useSSL=false&serverTimezone=UTC
jdbc.username=your_username
jdbc.password=your_password
jdbc.driverClassName=com.mysql.cj.jdbc.Driver

```

提示: 请将 your_usernameyour_password 替换为实际的数据库账号、密码。

在这里插入图片描述



四、编写登录页面与接口代码

1. 创建登录页面 (login.jsp)

web 目录下创建 login.jsp 文件。
在这里插入图片描述
编写代码:

```html
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    
    用户登录


    

用户登录





```

在这里插入图片描述

2. 创建登录结果页面 (result.jsp)

web 目录下创建 result.jsp 文件。

编写代码:

```html
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


  
  登录结果


登录结果

<% String message = (String) request.getAttribute("message"); %>

<%= message %>

返回登录页面 ```

在这里插入图片描述

3. 创建后端 Servlet 接口 (LoginServlet.java)

src/main/java 下创建新的 javaLoginServlet.java

在这里插入图片描述

在这里插入图片描述

编写 LoginServlet.java 代码:

```java
package com.example;

import com.example.utils.DBUtil;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.*;

@WebServlet(name = "LoginServlet", urlPatterns = "/Login")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        if (validateUser(username, password)) {
            req.setAttribute("message", "登录成功!");
        } else {
            req.setAttribute("message", "账号或密码错误!");
        }
        req.getRequestDispatcher("/result.jsp").forward(req, resp);
    }

    private boolean validateUser(String username, String password) {
        String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
        try (Connection connection = DBUtil.getConnection();
             PreparedStatement ps = connection.prepareStatement(sql)) {
            ps.setString(1, username);
            ps.setString(2, password);
            ResultSet rs = ps.executeQuery();
            return rs.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
}

```

新建的代码会有报错,我们需要在 pom.xml 文件里引入 javax 的包。

pom.xml 中添加以下依赖:

```xml

    
        mysql
        mysql-connector-java
        8.0.28
    


```

在这里插入图片描述

回到 LoginServlet.java 文件,可以看到已经没有报错了。

在这里插入图片描述

4. 编辑配置文件 (web.xml)

web.xml 里设置首页为 login.jsp,将 LoginServlet 的接口url /Login 配置到路由里。

```xml


    
        LoginServlet
        com.example.LoginServlet
    
    
        LoginServlet
        /Login
    
    
        login.jsp
    


```

在这里插入图片描述


五、启动和测试

启动项目。
在这里插入图片描述

在浏览器中访问项目根路径:http://localhost:8080/

看到我们首页自动跳转的登录页。
在这里插入图片描述
输入错误的账号或密码时,显示 "账号或密码错误!"

在这里插入图片描述

输入正确的账号密码时,显示 "登录成功!"

在这里插入图片描述


六、常见问题

1. jsp页面报404错误

解决方法:
① 检查路径是否正确;
TomcatDeployment 配置里 Application context 的路径设置为 /(参考文章里配置 Tomcat 的最后一步)

2. /Login接口报404错误

解决方法:
① 检查接口上方注解内url是否正确;
web.xml 文件是否正确配置(参考第四章第4节配置文件)

3. 连接不上数据库

解决方法:
① 检查账号、密码、数据库连接信息 (db.properties) 有没有写错;
Tomcat 运行的 jar 包来自其自身的libs文件夹,需要把 mysql-connector-java.jar 拷贝到 Tomcat 的安装路径下的 lib 文件夹下面。

mysql-connector-java.jarexternal libraries 目录下,它是由 Maven 自动导入的。

在这里插入图片描述

复制到 Tomcat 的安装路径下的 lib 文件夹下面。

在这里插入图片描述

重新启动项目,即可顺利连接数据库。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/6404.html

(0)
LomuLomu
上一篇 2025 年 1 月 15 日 上午3:00
下一篇 2025 年 1 月 15 日 上午3:52

相关推荐

  • 数据密集型应用系统设计PDF、EPUB免费下载

    适读人群 :所有后端开发者 英国剑桥大学分布式系统研究员力作,微软CTO联袂力荐,EMC资深架构师亲译。带你跨越从分布式理论到工程实践的鸿沟! 电子版仅供预览,支持正版,喜欢的请购买正版书籍 点击原文去下载 书籍信息 作者: Martin Kleppmann出版社: 中国电力出版社原作名: Designing Data-Intensive Applicati…

    2025 年 1 月 15 日
    58900
  • 深入解析ThreadLocal机制及其应用场景

    Java线程局部变量机制剖析 本文基于JDK21实现,核心原理与JDK8保持一致。 1.核心概念 ThreadLocal是多线程环境下的重要工具类,其设计理念在不同语言中虽有差异,但核心目标相同:为每个访问该变量的线程创建专属数据副本,实现线程间数据隔离,确保线程安全。核心价值1. 并发安全:消除多线程共享变量时的同步需求(如锁机制),提升并发效率2. 上下…

    未分类 2025 年 5 月 15 日
    30200
  • 华为OD机试E卷 –考勤信息–24年OD统一考试(Java & JS & Python & C & C++)

    文章目录 题目描述 输入描述 输出描述 用例 题目解析 JS算法源码 Java算法源码 python算法源码 c算法源码 c++算法源码 题目描述 公司用一个字符串来表示员工的出勤信息• absent:缺勤• late:迟到• leaveearly:早退• present:正常上班现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下:• 缺…

    未分类 2024 年 12 月 28 日
    81500
  • Java 之生产者和消费者模式详解

    1. 生产者和消费者模式概述 生产者和消费者模式是一种经典的并发设计模式,用于解决生产者和消费者之间数据共享问题。它主要涉及三个角色: 生产者 (Producer) :负责生产数据,例如将数据写入文件、读取数据库数据等。 消费者 (Consumer) :负责消费数据,例如将数据从文件中读取出来、对数据进行处理等。 缓冲区 (Buffer) :用于存放生产者生…

    未分类 2025 年 1 月 6 日
    50700
  • 华为OD机试E卷 –流浪地球–24年OD统一考试(Java & JS & Python & C & C++)

    文章目录 题目描述 输入描述 输出描述 用例 题目解析 JS算法源码 Java算法源码 python算法源码 c算法源码 c++算法源码 题目描述 流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为O~N-1。1)初始状态下所有的发动机都是未启动状态;2)发动机起动的方式分为“手动启动”和“关联启动”两种方式;3)如果在时刻1一个发动机被启动,下…

    未分类 2025 年 1 月 21 日
    82300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信