Java基于Servlet和JSP实现登录功能

 更新时间:2024年11月19日 09:41:46   作者:Damon小智  
在 Web 开发中,用户登录功能是非常常见的模块之一,本文将通过使用 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. 目标项目结构

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 中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
</dependencies>

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

在这里插入图片描述

安装成功如图:

在这里插入图片描述

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

1. 创建数据库与用户表

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

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 文件。

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

在这里插入图片描述

文件内容:

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_username 和 your_password 替换为实际的数据库账号、密码。

在这里插入图片描述

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

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

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

在这里插入图片描述

编写代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
    <h2>用户登录</h2>
    <form action="/Login" method="post">
        <label for="username">账号:</label>
        <input type="text" id="username" name="username" required>



        <label for="password">密码:</label>
        <input type="password" id="password" name="password" required>



        <input type="submit" value="登录">
    </form>
</body>
</html>

在这里插入图片描述

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

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

编写代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <meta charset="UTF-8">
  <title>登录结果</title>
</head>
<body>
<h2>登录结果</h2>
<%
  String message = (String) request.getAttribute("message");
%>
<p><%= message %></p>
<a href="/login.jsp" rel="external nofollow" >返回登录页面</a>
</body>
</html>

在这里插入图片描述

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

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

在这里插入图片描述

在这里插入图片描述

编写 LoginServlet.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 中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
</dependencies>

在这里插入图片描述

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

在这里插入图片描述

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

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

<?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>LoginServlet</servlet-name>
        <servlet-class>com.example.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/Login</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
</web-app>

在这里插入图片描述

五、启动和测试

启动项目。

在这里插入图片描述

在浏览器中访问项目根路径: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 文件夹下面。

在这里插入图片描述

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

以上就是Java基于Servlet和JSP实现登录功能的详细内容,更多关于Java Servlet和JSP登录的资料请关注脚本之家其它相关文章!

相关文章

  • java实现发送email小案例

    java实现发送email小案例

    这篇文章主要为大家详细介绍了java实现发送email小案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Java中Object类的常用方法小结

    Java中Object类的常用方法小结

    Java Object 类是所有类的父类,位于 java.lang 包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化

    SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化

    这篇文章主要介绍了SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • SpringSecurity集成第三方登录过程详解(最新推荐)

    SpringSecurity集成第三方登录过程详解(最新推荐)

    在ThirdAuthenticationFilter 类的attemptAuthentication()方法中,我们通过authType类型,然后创建对应的Authentication实现来实现不同方式的登录,下面给大家分享SpringSecurity集成第三方登录过程,感兴趣的朋友一起看看吧
    2024-05-05
  • 如何用Java实现啥夫曼编码

    如何用Java实现啥夫曼编码

    在开发手机程序时,总是希望压缩网络传输的信息,以减少流量。本文仅以哈夫曼编码为引导,抛砖引玉,实现压缩功能
    2013-08-08
  • Java面试题 从源码角度分析HashSet实现原理

    Java面试题 从源码角度分析HashSet实现原理

    这篇文章主要介绍了Java面试题 从源码角度分析HashSet实现原理?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • java 字符串内存分配的分析与总结(推荐)

    java 字符串内存分配的分析与总结(推荐)

    下面小编就为大家带来一篇java 字符串内存分配的分析与总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Java中Object类常用的12个方法(小结)

    Java中Object类常用的12个方法(小结)

    Java 中的 Object 方法在面试中是一个非常高频的点,本文主要介绍了Java中Object类常用的12个方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • SPRINGBOOT读取PROPERTIES配置文件数据过程详解

    SPRINGBOOT读取PROPERTIES配置文件数据过程详解

    这篇文章主要介绍了SPRINGBOOT读取PROPERTIES配置文件数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java集合TreeSet用法详解

    Java集合TreeSet用法详解

    本文详细讲解了Java集合TreeSet用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12

最新评论