当前位置:首页 » 《休闲阅读》 » 正文

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

9 人参与  2024年11月20日 12:02  分类 : 《休闲阅读》  评论

点击全文阅读


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


一、开发目标

1. 开发环境

开发工具: IntelliJ IDEA开发语言: JavaWeb 容器: Apache Tomcat数据库: MySQLJDK 版本: 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=UTCjdbc.username=your_usernamejdbc.password=your_passwordjdbc.driverClassName=com.mysql.cj.jdbc.Driver

提示: 请将 your_usernameyour_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 下创建新的 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 文件夹下面。

在这里插入图片描述

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/189185.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1