Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互


前言

  • 在前序的 JSP 基础教程中,我们已经掌握了动态页面的核心语法、请求响应处理及基础标签的使用方法,初步构建了基于 JSP 的 Web 开发认知。
  • 但在实际项目中,动态页面的价值往往需要与数据库结合才能充分释放 ——如何让 JSP 页面 “活” 起来?关键在于让页面能够动态读取并展示数据库中的实时数据。

本次实战教程将聚焦 “数据可视化展示” 这一核心场景,带领读者打通 “IDEA 开发环境→MySQL 数据库→JSP 页面” 的完整技术链路

我的个人主页,欢迎来阅读我的其他文章

我的JSP知识文章专栏
欢迎来阅读指出不足


一、JDBC 核心接口和类:数据库连接的“工具箱”

JDBC(Java Database Connectivity)是一套让 Java 程序能够连接和操作数据库的工具,就像一个“工具箱”。你用它来和数据库打交道,就像用钥匙开门一样。

1. 常用的 2 个“关键类”

这两个类就像是“工具箱”里的“常用工具”:

  • DriverManager :这个类的作用是帮助我们建立数据库连接。它就像是一个“中介”,帮你找到合适的钥匙(驱动程序)来打开数据库的门。
  • Connection :这个类代表了和数据库的连接。一旦连接建立,你就可以通过它和数据库进行通信,比如发送指令(SQL 语句)。

2. 必须掌握的 5 个“核心接口”

接口可以理解为一种“规范”,规定了某些功能的实现方式。这 5 个接口是 JDBC 的核心:

  • Driver :定义了数据库驱动程序需要实现的功能,比如如何连接到数据库。
  • Connection :表示和数据库的连接,你可以通过它发送 SQL 语句和接收结果。
  • Statement :用来执行 SQL 语句的接口。你可以通过它发送查询或更新数据库的指令。
  • ResultSet :用来接收查询结果的接口。当你执行查询操作后,结果会以表格的形式存储在这个对象里。
  • PreparedStatement :这是一个特殊的 Statement,可以预编译 SQL 语句,提高执行效率,还可以防止 SQL 注入攻击。

二、创建 JDBC 程序的步骤

创建一个 JDBC 程序,就像按照步骤组装一个玩具。以下是详细的步骤:

1. 第一步:加载数据库驱动

这一步就像是告诉 Java 程序,你准备用哪种“钥匙”去开门。你需要加载数据库驱动程序,让 Java 知道如何连接到数据库。
代码示例:

```java
Class.forName("com.mysql.cj.jdbc.Driver");

```

这里 com.mysql.cj.jdbc.Driver 是 MySQL 数据库驱动的类名。

2. 第二步:定义数据库连接地址

这一步是告诉 Java 程序,数据库在哪里。连接地址包括数据库的类型、服务器地址、数据库名称等信息。
例如:

```java
String url = "jdbc:mysql://localhost:3306/mydatabase";

```

这里 jdbc:mysql:// 表示使用 MySQL 数据库,localhost:3306 是数据库服务器的地址和端口,mydatabase 是数据库名称。

3. 第三步:建立连接

这一步是用 DriverManager 类,根据前面定义的连接地址和用户名、密码,建立和数据库的连接。
代码示例:

```java
Connection conn = DriverManager.getConnection(url, "username", "password");

```

这里 usernamepassword 是登录数据库的用户名和密码。

4. 第四步:创建 Statement

这一步是创建一个 Statement 对象,用来执行 SQL 语句。
代码示例:

```java
Statement stmt = conn.createStatement();

```

5. 第五步:执行 SQL 查询

这一步是通过 Statement 对象发送 SQL 语句到数据库。例如,查询数据库中的数据:

```java
String sql = "SELECT * FROM mytable";
ResultSet rs = stmt.executeQuery(sql);

```

这里 mytable 是表名,SELECT * FROM mytable 是 SQL 查询语句。

6. 第六步:处理结果集

这一步是处理返回的结果集(ResultSet)。你可以通过循环遍历结果集,获取每一行的数据。
代码示例:

```java
while (rs.next()) {
    String column1 = rs.getString("column1");
    int column2 = rs.getInt("column2");
    System.out.println(column1 + ", " + column2);
}

```

这里 column1column2 是表中的列名。

7. 第七步:关闭资源

这一步非常重要,是为了释放数据库连接和资源,避免浪费。
代码示例:

```java
rs.close();
stmt.close();
conn.close();

```

完整代码示例

以下是一个完整的 JDBC 程序示例,结合了上述所有步骤:

```java
import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
        try {
            // 第一步:加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 第二步:定义数据库连接地址
            String url = "jdbc:mysql://localhost:3306/mydatabase";
            String user = "username";
            String password = "password";

            // 第三步:建立连接
            Connection conn = DriverManager.getConnection(url, user, password);

            // 第四步:创建Statement
            Statement stmt = conn.createStatement();

            // 第五步:执行SQL查询
            String sql = "SELECT * FROM mytable";
            ResultSet rs = stmt.executeQuery(sql);

            // 第六步:处理结果集
            while (rs.next()) {
                String column1 = rs.getString("column1");
                int column2 = rs.getInt("column2");
                System.out.println(column1 + ", " + column2);
            }

            // 第七步:关闭资源
            rs.close();
            stmt.close();
            conn.close();
        } catch (ClassNotFoundException e) {
            System.out.println("数据库驱动未找到!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("数据库连接或操作失败!");
            e.printStackTrace();
        }
    }
}

```

下面我们来实际操作一下

三、实际操作教程

题目要求

  • 使用 IntelliJ IDEA 开发环境,通过 JDBC 连接关系型数据库(如 MySQL),查询指定表中的数据,并将数据以结构化形式(如表格)动态渲染到 JSP 页面的用户界面中,实现数据的可视化展示

第一步、导入数据库maven

  • 首先我们需要配置好自己的maven环境
  • maven环境必须是全英文,不然运行不了

我的jsp环境搭建博客

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 接着需要在maven的网站里找到数据库jdbc的依赖项
    这里我直接将jdbc的依赖项放出来
  • maven官方网站

    ```xml

            mysql
            mysql-connector-java
            8.0.33
    

    ```

  • 同时我们还需要导入jsp-api依赖项和javax.servlet-api依赖项

    ```xml

            javax.servlet
            javax.servlet-api
            3.1.0
            provided
    
            javax.servlet.jsp
            javax.servlet.jsp-api
            2.3.3
            provided
    

    ```

  • 最后由于需要用到jstl,我们需要加入jstl和taglibs的依赖项

    ```xml

            javax.servlet.jsp.jstl
            jstl-api
            1.2
    
            taglibs
            standard
            1.1.2
    

    ```

  • 导入之后的样子

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 配置好外部库
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 然后单击我们的SE1,新建一个模板
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

第二步、创建并导入web库

  • 我们新建了一个MySQLtest的模块,在里面单击右键,打开模板设置
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
  • 在MySQLtest里面添加web文件
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
  • 然后在工件里,找到web应用程序展开型,找到我们刚刚添加的MySQLweb文件
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
  • 在web-INF文件里创建一个lib文件,并导入我们的库文件
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

第三步、连接本地数据库的java代码

  • 首先新建三个java类UserListServlet,User,DBConnection
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
  • 接着在java类里面添加以下代码

user类

```java
package org.example;

// 表示用户信息的实体类
public class User {
    private int id; // 用户ID
    private String username; // 用户名
    private String email; // 用户邮箱
    private String phone; // 用户电话
    private String role; // 用户角色
    private String createTime; // 用户创建时间

    // 构造函数,参数顺序和类型要与查询结果列对应
    public User(int id, String username, String email, String phone, String role, String createTime) {
        this.id = id;
        this.username = username;
        this.email = email;
        this.phone = phone;
        this.role = role;
        this.createTime = createTime;
    }

    // 获取用户ID
    public int getId() { return id; }
    // 获取用户名
    public String getUsername() { return username; }
    // 获取用户邮箱
    public String getEmail() { return email; }
    // 获取用户电话
    public String getPhone() { return phone; }
    // 获取用户角色
    public String getRole() { return role; }
    // 获取用户创建时间
    public String getCreateTime() { return createTime; }
}

```

UserListServlet类

```java
package org.example;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

// 处理用户列表请求的 Servlet
@WebServlet("/UserListServlet")
public class UserListServlet extends HttpServlet {

    // 处理 GET 请求
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        List userList = new ArrayList<>();
        String sql = "SELECT id, user_name, email, phone, role, create_time FROM users";

        // 从数据库查询用户信息
        try (Connection conn = DBConnection.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql);
             ResultSet rs = pstmt.executeQuery()) {
            while (rs.next()) {
                int id = rs.getInt("id");
                String userName = rs.getString("user_name");
                String email = rs.getString("email");
                String phone = rs.getString("phone");
                String role = rs.getString("role");
                String createTime = rs.getString("create_time");

                User user = new User(id, userName, email, phone, role, createTime);
                userList.add(user);
            }
        } catch (SQLException e) {
            // 发生数据库操作异常时,向客户端发送错误响应
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            response.getWriter().println("Database error occurred. Please try again later.");
            return;
        }

        // 将用户列表存入会话
        HttpSession requestSession = request.getSession(true);
        requestSession.setAttribute("userList", userList);

        // 转发请求到 JSP 页面
        request.getRequestDispatcher("user.jsp").forward(request, response);
    }
}

```

第四步、创建数据库

  • 完成上面的代码之后,我们接着创建一个数据库,点击数据库按钮
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 然后找到加号,点击数据源,找到MySQL
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 在里面输入我们的密码和用户名
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 找到部署架构,里面就有我们的数据库文件
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 连接数据库的代码名字要求与我们的数据库匹配一致,这里我连接了2023se3
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • SQL查询语句要查询具体的表文件,这里我查询了user文件
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 然后点击运行按钮,如果在终端显示数据库连接成功,则代表环境搭建成功
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 然后构建我们的数据库
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

第五步、在JSP代码中获取session

  • 接下来我们准备好我们的jsp文件
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
  • 然后在jsp文件添加以下代码

    ```html

                ${user.id}
                ${user.username}
                ${user.email}
                ${user.phone}
                ${user.role}
                ${user.createTime}
    
                    屏蔽
    

    ```

  • 然后在jsp文件开头加入以下文件获取我们userlistservletsession获得的数据库的值

    ```html
      用户管理

    ```

第六步、编译运行环境

  • 找到最上面的编辑配置
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
    在里面配置好Tomcat服务器

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 启动环境
    Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
  • 然后点击用户管理刷新页面

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 这样我们的数据库的信息便打印到屏幕上了

三、本文所有代码

User类

```java
package org.example;
public class User {
    private int id;
    private String username;
    private String email;
    private String phone;
    private String role;
    private String createTime;

    // 构造函数参数顺序、类型必须与查询结果列顺序、类型一致
    public User(int id, String username, String email, String phone, String role, String createTime) {
        this.id = id;
        this.username = username;
        this.email = email;
        this.phone = phone;
        this.role = role;
        this.createTime = createTime;
    }

    // 确保所有属性都有对应的 getter 方法
    public int getId() { return id; }
    public String getUsername() { return username; }
    public String getEmail() { return email; }
    public String getPhone() { return phone; }
    public String getRole() { return role; }
    public String getCreateTime() { return createTime; }
}

```

UserListServlet类

```java
package org.example;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

// 处理用户列表请求的 Servlet
@WebServlet("/UserListServlet")
public class UserListServlet extends HttpServlet {

    // 处理 GET 请求
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        List userList = new ArrayList<>();
        String sql = "SELECT id, user_name, email, phone, role, create_time FROM users";

        // 从数据库查询用户信息
        try (Connection conn = DBConnection.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql);
             ResultSet rs = pstmt.executeQuery()) {
            while (rs.next()) {
                int id = rs.getInt("id");
                String userName = rs.getString("user_name");
                String email = rs.getString("email");
                String phone = rs.getString("phone");
                String role = rs.getString("role");
                String createTime = rs.getString("create_time");

                User user = new User(id, userName, email, phone, role, createTime);
                userList.add(user);
            }
        } catch (SQLException e) {
            // 发生数据库操作异常时,向客户端发送错误响应
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            response.getWriter().println("Database error occurred. Please try again later.");
            return;
        }

        // 将用户列表存入会话
        HttpSession requestSession = request.getSession(true);
        requestSession.setAttribute("userList", userList);

        // 转发请求到 JSP 页面
        request.getRequestDispatcher("user.jsp").forward(request, response);
    }
}

```

DBConnection类

```java
package org.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
    private static final String URL = "jdbc:mysql://localhost:3306/2023se3";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";


    public static Connection getConnection() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
            System.out.println("数据库连接成功");
            return conn;
        } catch (ClassNotFoundException | SQLException e) {
            throw new RuntimeException("数据库连接失败", e);
        }
    }

    public static void main(String[] args) {
        DBConnection.getConnection();

    }
}

```

pom.xml文件

```xml


    4.0.0

    org.example
    SE1
    1.0-SNAPSHOT
    pom

        MySQLtest



        17
        17
        UTF-8



            javax.servlet
            javax.servlet-api
            3.1.0
            provided



            javax.servlet.jsp
            javax.servlet.jsp-api
            2.3.3
            provided



            mysql
            mysql-connector-java
            8.0.33



            javax.servlet.jsp.jstl
            jstl-api
            1.2



            taglibs
            standard
            1.1.2





```

user.jsp文件

```html








  pha-Admin


















       pha-Admin





        &nbsp;&nbsp;后台首页
        &nbsp;&nbsp;用户管理
        &nbsp;&nbsp;机器管理
        &nbsp;&nbsp;服务管理
        &nbsp;&nbsp;日志管理
        &nbsp;&nbsp;使用文档








            &nbsp;&nbsp;个人设置


        &nbsp;&nbsp;退出











          用户列表
          添加用户





















              id
              用户名
              邮箱
              手机
              角色
              创建时间
              操作






                ${user.id}
                ${user.username}
                ${user.email}
                ${user.phone}
                ${user.role}
                ${user.createTime}


                    屏蔽























          Copyright&nbsp;©&nbsp;2017-2018&nbsp;&nbsp;phachon@163.com&nbsp;&nbsp;














  var pageData = [];
  pageData.push({'pageSize': '10', 'total': '1000', 'pageIndex': '2'});
  Common.paginator("#paginator", pageData);
  Account.bindFancyBox();




```

以上就是这篇博客的全部内容,下一篇我们将继续探索JSP的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章

我的JSP知识文章专栏
欢迎来阅读指出不足

非常感谢您的阅读,喜欢的话记得三连哦

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

相关文章

暂无评论

暂无评论...