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

举报
Damon小智 发表于 2024/11/24 23:15:14 2024/11/24
【摘要】 在 Web 开发中,用户登录功能是非常常见的模块之一。本文将通过使用 Java Servlet 和 JSP 实现一个简单的用户登录功能,展示如何创建登录页面、处理用户登录请求,并使用数据库 验证用户信息。还将介绍如何在 IntelliJ IDEA 中创建 Servlet 项目,引入 MySQL 连接器,并将 login.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><br><br>
<label for="password">密码:</label>
<input type="password" id="password" name="password" required><br><br>
<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">返回登录页面</a>
</body>
</html>

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

src/main/java 下创建新的 java 类 LoginServlet.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错误

解决方法:

① 检查路径是否正确;

② Tomcat 的Deployment 配置里 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.jar 在 external libraries 目录下,它是由 Maven 自动导入的。

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


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。