使用<c:forEach>遍历数据库数据时JSP页面空白问题求助
页面空白问题排查及修复方案
核心问题1:Servlet未完成请求转发
你的Servlet仅将products存入request属性,但没有将请求转发到目标JSP页面,导致JSP根本接收不到products数据。
- 修复:在
request.setAttribute后添加转发代码:
request.getRequestDispatcher("/你的首页路径.jsp").forward(request, response);
核心问题2:空catch块吞掉异常
catch块为空,ProductDAO.getAllProducts()执行时如果出现异常(比如数据库连接失败、SQL语法错误),你完全无法感知,也无法定位问题。
- 修复:至少添加异常日志打印:
catch(Exception xcp) { xcp.printStackTrace(); // 控制台打印异常信息,方便排查 }
JSP代码中的问题
- 未引入JSTL核心标签库:使用
<c:forEach>必须在JSP开头添加标签库声明,否则标签会被当作普通文本忽略,不会执行遍历逻辑。- 修复:在JSP最顶部添加:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - 多余的
<jsp:useBean>标签:这行代码会重新创建一个空的Products对象,覆盖<c:forEach>中遍历出来的p变量,导致原本的商品数据无法读取。- 修复:直接删除
<jsp:useBean id="p" class="com.testing.products.Products"/>这一行。
- 修复:直接删除
额外验证点
- 确认
ProductDAO.getAllProducts()确实返回非空List:在Servlet中添加System.out.println(products.size());,查看控制台输出是否大于0。 - 确认EL表达式生效:如果页面直接显示
${p.price}而非具体数值,需检查web.xml是否配置了Servlet 2.4及以上版本(通常无需额外配置,除非手动关闭EL)。
内容的提问来源于stack exchange,提问作者Donatus Bassey
相关产品推荐
相关产品推荐

