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

JEE Web应用中如何在JSP读取Servlet传递的数组元素?

如何在JSP中读取Servlet传递的JSON格式数组元素?

问题描述

我开发了一个基于JEE的Web应用,遇到的问题是:从Servlet向JSP传递数组类型的数据,但不知道如何读取每个元素。

Servlet中的代码如下:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
Connection c = DriverManager.getConnection("jdbc:sqlserver://localhost\\SQL2008R2:99;database=Netos_DB;user=sa;password=123"); 
Statement statement = c.createStatement(); 
int xVal; 
Float yVal; 
String nom; 
String name = request.getParameter("nom"); 
PreparedStatement ps = c.prepareStatement("select * from V502_client where M500_NOM=?"); 
ps.setString(1, name); 
ResultSet resultSet = ps.executeQuery(); 
while(resultSet.next()){ 
    xVal = resultSet.getInt("Mois"); 
    yVal = resultSet.getFloat("ChiffreAffaire"); 
    nom=resultSet.getString("M500_NOM"); 
    map = new HashMap<Object,Object>(); 
    map.put("x", xVal); 
    map.put("y", yVal);map.put("z",nom); 
    list.add(map); 
    dataPoints = gsonObj.toJson(list); 
} 
request.getSession().setAttribute("data", dataPoints); 
RequestDispatcher rd = request.getRequestDispatcher("graph.jsp"); 
rd.forward(request, response);

当我进入JSP页面后,写了:<div> ${data} </div>,但页面显示的是[{"x":3,"y":2280.0,"z":"3EG"},{"x":6,"y":4200.0,"z":"3EG"}],我需要知道如何读取其中的每个元素。


解决方案

我给你两种实用的处理方式,你可以根据场景选择:

方法一:直接传递List对象(JEE后端推荐方案)

你现在是把List转成JSON字符串再存到Session,其实可以直接传递List对象,用JSTL标签就能轻松遍历读取元素:

  1. 修改Servlet代码:
    把循环里的dataPoints = gsonObj.toJson(list);移到循环外,直接存储List到Session:

    while(resultSet.next()){ 
        xVal = resultSet.getInt("Mois"); 
        yVal = resultSet.getFloat("ChiffreAffaire"); 
        nom=resultSet.getString("M500_NOM"); 
        Map<Object,Object> map = new HashMap<>(); 
        map.put("x", xVal); 
        map.put("y", yVal);
        map.put("z",nom); 
        list.add(map); 
    } 
    // 直接存储List对象,无需转JSON
    request.getSession().setAttribute("dataList", list); 
    RequestDispatcher rd = request.getRequestDispatcher("graph.jsp"); 
    rd.forward(request, response);
    
  2. 在JSP中遍历读取:
    先引入JSTL核心标签库,再用<c:forEach>遍历List:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <div>
        <c:forEach items="${dataList}" var="item">
            <p>月份: ${item.x}, 营业额: ${item.y}, 名称: ${item.z}</p>
        </c:forEach>
    </div>
    

    这样页面就会逐个展示每个元素的属性值了。

方法二:解析JSON字符串(适合前端JS处理场景)

如果坚持要传递JSON字符串,可以用JavaScript把它解析成JS数组,再遍历读取:

<div id="dataContainer"></div>

<script>
    // 获取Session中的JSON字符串
    var jsonData = "${data}";
    // 解析为JavaScript数组
    var dataArray = JSON.parse(jsonData);
    
    // 遍历数组并渲染到页面
    var container = document.getElementById('dataContainer');
    dataArray.forEach(function(item) {
        var itemElement = document.createElement('div');
        itemElement.innerHTML = `月份:${item.x},营业额:${item.y},名称:${item.z}`;
        container.appendChild(itemElement);
    });
</script>

小优化提示

你Servlet里的dataPoints = gsonObj.toJson(list);放在while循环里是冗余的,每次循环都会重新序列化整个List,浪费性能,建议移到循环外面哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:17:39