searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

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

2024-11-25 09:28:30
1110
0

在 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​。

001.jpg

File​​ 菜单栏里选择 ​Project Structure​。

002.jpg

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

003.jpg

点击 ​OK

004.jpg

创建结果如图:

005 - 副本 (2).jpg

2. 配置 Tomcat 服务器

启动按钮旁边,点击 ​Edit Configurations​。

006.jpg

添加 ​Tomcat Server > Local​。

007.jpg

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

008.jpg

Project Settings​​ 选择 ​Artifacts​​,添加 ​Web Application Exploded​​,选择 ​From Modules​。

009.jpg

后面全部点击 ​OK​。

010.jpg

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

010补.jpg

3. 引入 MySQL 连接器依赖

在 ​pom.xml​ 中添加以下依赖:

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

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

011.jpg

安装成功如图:

012.jpg

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

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');

013.jpg

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

java​​ 目录下创建 ​com > example > utils​​ 文件夹下工具类文件 ​DBUtil.java​。

014.jpg

015.jpg

编写 ​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​。

016.jpg

文件内容:

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

017.jpg



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

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

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

018.jpg

编写代码:

<%@ 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>

019.jpg

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>

019补.jpg

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

src/main/java​​ 下创建新的 ​java​​ 类 ​LoginServlet.java​。

020.jpg

021.jpg

编写 ​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>

022.jpg

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

023.jpg

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>

024.jpg


五、启动和测试

启动项目。

025.jpg

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

看到我们首页自动跳转的登录页。

026.jpg

输入错误的账号或密码时,显示 ​"账号或密码错误!"​。

027.jpg

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

028.jpg


六、常见问题

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​ 自动导入的。

029.jpg

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

030.jpg

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

0条评论
0 / 1000
Damon小智
19文章数
1粉丝数
Damon小智
19 文章 | 1 粉丝
原创

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

2024-11-25 09:28:30
1110
0

在 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​。

001.jpg

File​​ 菜单栏里选择 ​Project Structure​。

002.jpg

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

003.jpg

点击 ​OK

004.jpg

创建结果如图:

005 - 副本 (2).jpg

2. 配置 Tomcat 服务器

启动按钮旁边,点击 ​Edit Configurations​。

006.jpg

添加 ​Tomcat Server > Local​。

007.jpg

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

008.jpg

Project Settings​​ 选择 ​Artifacts​​,添加 ​Web Application Exploded​​,选择 ​From Modules​。

009.jpg

后面全部点击 ​OK​。

010.jpg

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

010补.jpg

3. 引入 MySQL 连接器依赖

在 ​pom.xml​ 中添加以下依赖:

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

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

011.jpg

安装成功如图:

012.jpg

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

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');

013.jpg

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

java​​ 目录下创建 ​com > example > utils​​ 文件夹下工具类文件 ​DBUtil.java​。

014.jpg

015.jpg

编写 ​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​。

016.jpg

文件内容:

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

017.jpg



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

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

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

018.jpg

编写代码:

<%@ 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>

019.jpg

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>

019补.jpg

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

src/main/java​​ 下创建新的 ​java​​ 类 ​LoginServlet.java​。

020.jpg

021.jpg

编写 ​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>

022.jpg

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

023.jpg

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>

024.jpg


五、启动和测试

启动项目。

025.jpg

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

看到我们首页自动跳转的登录页。

026.jpg

输入错误的账号或密码时,显示 ​"账号或密码错误!"​。

027.jpg

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

028.jpg


六、常见问题

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​ 自动导入的。

029.jpg

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

030.jpg

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

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
2
2