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

JSP无法从Servlet获取requestScope下的List<String>问题求助

排查Servlet传List到JSP无法获取的问题

嘿,我太懂你这种明明数据就在眼前,JSP却死活拿不到的挫败感了!控制台能打印List元素,说明数据本身没问题,问题大概率出在数据传递的环节或者JSP取值的姿势上。给你几个我踩过坑后总结的排查方向:

1. 先检查跳转方式是不是错了

如果你的Servlet用的是response.sendRedirect("xxx.jsp"),那request里的属性肯定拿不到!因为这是客户端跳转,相当于浏览器重新发了一次请求,原来的request对象早就被销毁了。

换成服务器端跳转就好:

// 先把List存到request里
request.setAttribute("hotelList", yourList);
// 再用getRequestDispatcher转发
request.getRequestDispatcher("/targetPage.jsp").forward(request, response);

要是你存的是session,跳转方式不影响,但得确保session没被意外 invalidate 掉。

2. 核对JSP里的取值细节

  • 变量名要完全匹配:Servlet里存的是request.setAttribute("hotelList", list),JSP里就不能写成${hotelsList},大小写也不能错,EL表达式是区分大小写的。
  • 确保EL表达式没被忽略:在JSP顶部加上<%@ page isELIgnored="false" %>,要是这个属性设为true,EL会被当成普通字符串输出,自然拿不到数据。
  • 取值范围别搞混:如果存的是requestScope,就别在JSP里用${sessionScope.hotelList},直接写${hotelList}让容器自动从page→request→session→application里查找,更省心。

3. 检查代码执行顺序

别犯这种低级但容易踩的错:先跳转再存数据!比如你先调用了forward,再去setAttribute,那数据根本没存到当前请求里,JSP当然拿不到。正确顺序一定是:生成List → 存到request/session → 跳转页面。

4. 用JSTL遍历的话要引对标签库

如果你想用<c:forEach>遍历List,得在JSP顶部引入JSTL核心标签库:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

不然标签会被当成普通文本,遍历逻辑根本不生效。

举个完整的正确示例:

Servlet代码片段

@WebServlet(name = "ValidaLoginHotelServlet", urlPatterns = {"/ValidaLoginHotelServlet"})
public class ValidaLoginHotelServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 生成你的List
        List<Hotel> hotelList = new ArrayList<>();
        // 假设这里添加了元素,控制台能打印
        hotelList.add(new Hotel("酒店A", "地址A"));
        System.out.println(hotelList.get(0).getName()); // 能正常输出

        // 存到request
        request.setAttribute("hotelList", hotelList);
        // 服务器端跳转
        request.getRequestDispatcher("/hotelList.jsp").forward(request, response);
    }
}

JSP代码片段

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>酒店列表</title>
</head>
<body>
    <h3>酒店列表:</h3>
    <c:forEach items="${hotelList}" var="hotel">
        <p>酒店名称:${hotel.name},地址:${hotel.address}</p>
    </c:forEach>
</body>
</html>

按照这些方向排查,应该能找到问题所在!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:13:34