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

MVC架构下JSP无法显示用户个人资料(无报错)

问题分析与修复方案

你遇到的问题主要来自三个核心点:SQL语句的错误拼接、JSTL循环的作用域误用,还有一处小的注释笔误,我来逐一帮你解决:

1. SQL语句语法错误(最关键问题)

在CustomerViewQuery的list()方法里,你的PreparedStatement字符串拼接完全错误:

PreparedStatement pst = con.prepareStatement("SELECT * FROM customers WHERE username='\"+uName+\"'");

这种写法会把"+uName+"这个固定字符串当作username的值去查询,既取不到你传入的uName变量内容,还会直接导致SQL语法报错。正确的做法是使用参数占位符,这不仅能解决语法问题,还能避免SQL注入风险:

PreparedStatement pst = con.prepareStatement("SELECT * FROM customers WHERE username=?");
pst.setString(1, uName); // 给占位符赋值,1代表第一个?的位置

2. JSTL循环的作用域错误

你的CustomerProfile.jsp里,<c:forEach>标签是空的,所有表单字段都在循环外部,这就导致${customer}变量在循环外根本不存在,自然取不到任何数据。
因为你是根据username查询单个用户的详情,这里有两种修复方式:

方案一:把表单放进循环(兼容多结果场景)

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach items="${customers}" var="customer">
<div class="container mt-5"><br>
<form role="form" action="CustomerController" data-toggle="validator" method="post" id="registerForm">
<!-- 所有表单字段都放在循环内部 -->
<div class="form-group row">
  <label for="name" class="col-sm-2 col-form-label">Name</label>
  <div class="col-sm-10">
    <input type="text" name="name" value="${customer.name}" placeholder="Name">
  </div>
</div>
<!-- 其他字段省略 -->
</form>
</div>
</c:forEach>

方案二:直接取列表第一个元素(更适合单用户场景)

因为username是唯一的,查询结果只会有一个用户,所以可以不用循环,直接取列表的第一个元素:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="customer" value="${customers[0]}" />
<div class="container mt-5"><br>
<form role="form" action="CustomerController" data-toggle="validator" method="post" id="registerForm">
<!-- 正常使用${customer.name}等表达式 -->
</form>
</div>

3. Servlet里的注释笔误(不影响功能,但建议修正)

在CustomerProfileController的doGet方法里,你写了一句错误的注释:

// Will be available as ${products} in JSP

但实际你存入request的属性是customers,所以应该改成:

// Will be available as ${customers} in JSP

额外调试建议

可以在Servlet里加一句调试代码,确认是否从数据库查到了数据:

System.out.println("查询到的用户数量:" + customers.size());

如果输出为0,说明SQL查询逻辑还有问题;如果输出为1,那就是JSP的渲染问题,按照上面的方案修复即可。

内容的提问来源于stack exchange,提问作者Kasun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:19:33