数据库信息在网页中显示出现问题

从mysql数据库中获取数据并传到jsp网页表格中显示,浏览器报500.

img

前端代码如下

<%@ page import="java.util.ArrayList" %>
<%@ page import="com.eneity.Custom" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>test</title>
</head>
<body>
<table>
    <tr>
        <td>客户号</td>
        <td>姓名</td>
        <td>联系电话</td>
        <td>地址</td>
    </tr>
    <%
        ArrayList<Custom> list = (ArrayList<Custom>) request.getAttribute("list");
        System.out.println("test1");
        for (Custom custom : list) {
            System.out.println("test2");
    %>
    <tr>
        <td><%=custom.getId()%></td>
        <td><%=custom.getName()%></td>
        <td><%=custom.getPhone()%></td>
        <td><%=custom.getAdd()%></td>
    </tr>
    <%
        }
    %>
</table>
</body>
</html>

实体如下

package com.eneity;
import lombok.Data;

//客户信息
@Data
public class Custom {
    private String id;//客户号
    private String name;//姓名
    private String phone;//联系电话
    private String add;//地址

    public Custom(){
    }

    public Custom(String id, String name, String phone, String add) {
        this.id = id;
        this.name = name;
        this.phone = phone;
        this.add = add;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPhone() {
        return phone;
    }

    public String getAdd() {
        return add;
    }
    public void setId(String id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public void setAdd(String add) {
        this.add = add;
    }
    @Override
    public String toString() {
        return "Custom{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", phone='" + phone + '\'' +
                ", add='" + add + '\'' +
                '}';
    }
}

自定义JDBC工具类如下

package com.utils;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;
    /**
     * jdbc.properties配置文件读取,只用执行一次,使用静态代码块
     */
    static {
        try {
            //1. 创建Properties集合类。
            Properties properties = new Properties();
            //获取src路径下的文件的方式--->ClassLoader 类加载器
            ClassLoader classLoader = JDBCUtils.class.getClassLoader();
            URL res  = classLoader.getResource("jdbc.properties");
            String path = res.getPath();
            //2. 加载文件
            properties.load(new FileReader(path));
            url = properties.getProperty("jdbc:mysql://localhost:3306/数据库名称");
            user = properties.getProperty("用户名");
            password = properties.getProperty("密码");
            driver = properties.getProperty("com.mysql.cj.jdbc.Driver");
            //注册驱动
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取连接
     * @return 连接对象
     */
    public static Connection getConnection() throws SQLException {

        return DriverManager.getConnection(url, user, password);
    }
    /**
     * 释放资源
     * @param statement
     * @param connection
     */
    public static void close(Statement statement, Connection connection) {
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
    /**
     * 释放资源
     * @param resultSet
     * @param statement
     * @param connection
     */
    public static void close(Statement statement, Connection connection, ResultSet resultSet) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

后端读取数据库信息


```java
package com.servlet;
import com.eneity.Custom;
import com.utils.JDBCUtils;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/test")
public class CustomServlet extends HttpServlet {
    // 访问Servlet默认访问service方法
    @Override
    // req浏览器向服务器发送消息;resp服务器处理完将信息返回给浏览器
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("开始");
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        ArrayList<Custom> list = new ArrayList<>();
        try {
            connection = JDBCUtils.getConnection();
            String sql = "SELECT * FROM 客户信息";
            statement = connection.prepareStatement(sql);
            System.out.println(statement);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                String id = resultSet.getString(1);
                String name = resultSet.getString(2);
                String phone= resultSet.getString(3);
                String add = resultSet.getString(4);
                Custom custom = new Custom(id,name,phone,add);
                list.add(custom);
            }
            for (Custom custom : list) {
                System.out.println(custom);
            }
        } catch (SQLException throwable) {
            throwable.printStackTrace();
        } finally {
            JDBCUtils.close(statement,connection,resultSet);
        }
        // 把list数据放到一块内存里面
        request.setAttribute("list",list);
        // 跳转到student_list.jsp展示数据
        // Dispatcher:分发   forward:转发
        request.getRequestDispatcher("test.jsp").forward(request,response);
    }
}

```

根据报错提示,可以看出list是一个空对象null,所以导致出来了空指针异常。
检查一下控制台是否报错了,看下报错信息。

看看日志,日志提示什么

根据前端提供的代码,可能是以下原因导致了500错误:

1、ArrayList 类型的变量 list 无法在 JSP 页面中正确显示,可能是因为 Custom 类没有正确导入或者没有正确实例化。
2、在 JSP 页面中使用 <% %> 标记来嵌入 Java 代码时,需要确保 Java 代码没有语法错误或逻辑错误。
3、服务器可能无法连接到 MySQL 数据库,或者无法从数据库中检索数据。请确保您的数据库连接信息正确无误,并且数据库用户具有足够的权限来执行所需的操作。

参考文章https://blog.csdn.net/m0_51649818/article/details/119579452

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^