You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSP/Servlet页面无法显示MySQL数据库数据问题排查

我仔细看了你的代码和问题描述,虽然SQL在Workbench能正常返回数据,但代码里有好几处关键逻辑错误导致表格显示不出数据,咱们一个个来修复:

1. Servlet层(AdminPanel.java)的致命问题

你的Servlet逻辑完全走不通,根本没法把数据传递给JSP:

  • 直接使用未初始化的rs对象:你在Servlet里写的while(rs.next())中的rs根本没有关联到数据库查询结果,这个循环不会执行哪怕一次。
  • 错误调用UserDAO.adminPanel(user):这个方法的设计根本不是用来获取用户列表的,你传入空的UserBean也拿不到任何数据。
  • 没有转发请求到JSP:就算你把数据放到request属性里,不转发到JSP页面,前端也接收不到memberList。
  • 字段名不匹配:数据库里的列是tipo,但你用rs.getInt("type")会抛出SQL异常,导致数据封装失败。

修复后的AdminPanel.java示例:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 调用DAO获取所有用户列表
    ArrayList<UserBean> memberList = UserDAO.getAllUsers();
    
    // 将列表存入request属性(要在数据准备完成后再设置)
    request.setAttribute("memberList", memberList);
    
    // 转发到JSP页面,让前端能拿到数据
    RequestDispatcher dispatcher = request.getRequestDispatcher("/AdminPanel.jsp");
    dispatcher.forward(request, response);
}
2. DAO层(UserDAO.java)的逻辑重构

原来的adminPanel方法是针对单个用户的验证逻辑,完全不符合获取所有用户的需求,需要重写为专门的列表查询方法:

修复后的UserDAO.java新增getAllUsers方法(可以替换原有的adminPanel):

public static ArrayList<UserBean> getAllUsers() {
    ArrayList<UserBean> userList = new ArrayList<>();
    Connection currentCon = null;
    Statement stmt = null;
    ResultSet rs = null;
    String searchQuery = "select firstname, lastname, username, tipo from idusuario";

    try {
        Class.forName("com.mysql.jdbc.Driver");
        currentCon = DriverManager.getConnection("jdbc:mysql://localhost:3306/usuarios", "root", "admin");
        stmt = currentCon.createStatement();
        rs = stmt.executeQuery(searchQuery);

        // 遍历结果集,封装每个用户到列表
        while (rs.next()) {
            UserBean user = new UserBean();
            user.setFirstName(rs.getString("firstname"));
            user.setLastName(rs.getString("lastname"));
            user.setUserName(rs.getString("username"));
            // 注意数据库列名是tipo,对应UserBean的type属性
            user.setType(rs.getInt("tipo"));
            userList.add(user);
        }
    } catch (ClassNotFoundException ex) {
        System.out.println("Error al cargar el driver: " + ex.getMessage());
    } catch (SQLException ex) {
        System.out.println("Error en la consulta de base de datos: " + ex.getMessage());
    } finally {
        // 必须关闭数据库资源,防止泄漏
        try {
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
            if (currentCon != null) currentCon.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
    return userList;
}
3. JSP页面(AdminPanel.jsp)的两个关键修复

你的JSP存在标签未生效、HTML结构错误的问题:

  • 必须引入JSTL标签库:c:forEach和c:out属于JSTL核心标签,不引入的话浏览器会把它们当作普通文本,根本不会执行循环。
  • HTML结构错误:你把c:forEach嵌套在一个<tr>标签内部,导致生成的表格结构混乱,应该直接用循环生成每一行<tr>。

修复后的AdminPanel.jsp示例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- 引入JSTL核心标签库,这是使用c:forEach的前提 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<form action="AdminPanel" method="get">
    <table style="width:100%">
        <caption>Usuarios Registrados</caption>
        <tr>
            <th>Nombre</th>
            <th>Apellido</th>
            <th>Usuario</th>
            <th>Estado</th>
            <th>Habilitar</th>
        </tr>
        <!-- 直接用c:forEach循环生成每一行,不要嵌套在<tr>里 -->
        <c:forEach var="row" items="${memberList}">
            <tr>
                <td><c:out value="${row.firstname}"/></td>
                <td><c:out value="${row.lastname}"/></td>
                <td><c:out value="${row.username}"/></td>
                <td><c:out value="${row.type}"/></td>
                <!-- 编辑按钮指向Servlet,传递用户标识以便后续修改逻辑 -->
                <td><a href="AdminPanel?action=edit&username=${row.username}">Habilitar usuario</a></td>
            </tr>
        </c:forEach>
    </table>
</form>
额外注意事项
  • 确保项目中添加了JSTL依赖:如果是Maven项目,需要引入jstl和standard的依赖包,否则JSP标签会报错。
  • 检查UserBean的getter/setter:比如firstname对应的getter应该是getFirstName()(驼峰命名),EL表达式会自动匹配这个方法。
  • 查看控制台日志:如果还是有问题,去Tomcat控制台看是否有SQL异常或空指针异常,这些是排查问题的关键。

内容的提问来源于stack exchange,提问作者Gastón Saillán

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:40:38