在 Web 开发中,用户登录功能是非常常见的模块之一。本文将通过使用 Java Servlet 和 JSP 实现一个简单的用户登录功能,展示如何创建登录页面、处理用户登录请求,并使用数据库验证用户信息。还将介绍如何在 IntelliJ IDEA 中创建 Servlet 项目,引入 MySQL 连接器,并将 login.jsp
设置为项目的默认主页。
一、开发目标
1. 开发环境
开发工具: IntelliJ IDEA开发语言: JavaWeb 容器: Apache Tomcat数据库: MySQLJDK 版本: JDK 8 或以上依赖管理: Maven2. 目标功能
实现用户在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=UTCjdbc.username=your_usernamejdbc.password=your_passwordjdbc.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
文件夹下面。
重新启动项目,即可顺利连接数据库。