JSP页面重载后Java JSONArray重复添加元素问题排查
问题原因与解决方案
核心问题
你的JSONArray array是全局/类成员变量,而非每次请求时创建的局部变量。当页面重载发起新请求时,程序没有清空旧数组,而是直接在原有数据的基础上追加新查询到的内容,导致数据重复累加。
修复方案
将JSONArray的声明移到查询方法内部,确保每次请求都创建一个全新的数组实例,避免复用旧数据:
// 每次调用方法时,新建JSONArray实例 JSONArray array = new JSONArray(); // 执行数据库查询及循环 try (ResultSet rs = ...) { while (rs.next()) { JSONObject record = new JSONObject(); record.put("eventName", rs.getInt("id")); record.put("calendar", rs.getString("tool")); record.put("color", color); record.put("eventTime", rs.getString("datestart").replace("T", " ")); array.add(record); } }
关键说明
如果array是类的成员变量(比如DAO类的属性),在Web应用中DAO实例通常是单例模式,会被多个请求复用,旧数据不会自动清空。改成方法内的局部变量后,每次请求都会重新初始化数组,自然不会出现重复追加的问题。
额外检查点
- 确认是否存在缓存逻辑错误,比如误将新旧数组合并后返回
- 排查前端是否发起了重复请求,但从现象看后端数组复用的可能性更高
内容的提问来源于stack exchange,提问作者Ionut Apostu
相关产品推荐
相关产品推荐

