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

如何从JSP页面向Java Servlet传递数组?

把JS数组传给Java Servlet的几种实用方案

嘿,我来给你几个靠谱的方法,解决把JS里的members数组传给Servlet的问题~

方法1:表单隐藏域提交(适合传统表单提交场景)

这个方法很适合你已经有表单的情况,把数组转成字符串塞进隐藏输入框,提交后在Servlet再转回来:

步骤1:修改JS代码,把数组存入隐藏域

首先在你的JSP页面里加一个隐藏的input:

<input type="hidden" id="membersInput" name="members">

然后修改你的JavaScript,把数组转成逗号分隔的字符串(如果元素不含逗号的话):

var members = []; 
var table = document.getElementById("my_table"); 
for(var i = 1; i < table.rows.length; i++) { 
    if(table.rows[i].getAttribute("checked")==="true") { 
        members.push(table.rows[i].id.substring(2)); 
    } 
} 
// 把数组转成字符串存入隐藏域
document.getElementById("membersInput").value = members.join(',');
// 提交表单(假设你的表单id是myForm)
document.getElementById("myForm").submit();

步骤2:Servlet接收并解析

在Servlet里拿到字符串后,拆分成数组:

request.setCharacterEncoding("UTF-8"); // 先确保编码正确
String membersStr = request.getParameter("members");
if (membersStr != null && !membersStr.isEmpty()) {
    String[] membersArray = membersStr.split(",");
    // 接下来就可以用这个数组啦
}

⚠️ 注意:如果你的数组元素可能包含逗号,建议用JSON.stringify(members)转成JSON字符串,Servlet那边再用JSON库解析,避免拆分出错。


方法2:AJAX发送JSON(适合异步提交场景)

如果不想刷新页面,用AJAX异步发送数组是更好的选择,这里用现代的fetch API举例:

步骤1:JS里用fetch发送JSON

var members = []; 
var table = document.getElementById("my_table"); 
for(var i = 1; i < table.rows.length; i++) { 
    if(table.rows[i].getAttribute("checked")==="true") { 
        members.push(table.rows[i].id.substring(2)); 
    } 
} 

// 发送AJAX请求
fetch("YourServletName", {
    method: "POST",
    headers: {
        "Content-Type": "application/json;charset=UTF-8"
    },
    body: JSON.stringify(members)
})
.then(response => response.text())
.then(data => {
    console.log("提交成功,返回结果:", data);
})
.catch(error => {
    console.error("提交出错:", error);
});

步骤2:Servlet读取并解析JSON

需要用到JSON解析库,比如Gson或者Jackson,这里用Gson举例(先确保项目里引入了Gson依赖):

request.setCharacterEncoding("UTF-8");
// 读取请求体里的JSON字符串
BufferedReader reader = request.getReader();
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
    sb.append(line);
}
String jsonStr = sb.toString();

// 用Gson解析成字符串数组
Gson gson = new Gson();
String[] membersArray = gson.fromJson(jsonStr, String[].class);

方法3:传递多值参数(最省心的GET/POST方式)

Servlet其实支持直接获取同名的多个参数,你可以把数组的每个元素作为同一个参数名的不同值传递:

步骤1:JS里用FormData或者拼URL

方式A:用FormData(POST请求)

var members = []; 
var table = document.getElementById("my_table"); 
for(var i = 1; i < table.rows.length; i++) { 
    if(table.rows[i].getAttribute("checked")==="true") { 
        members.push(table.rows[i].id.substring(2)); 
    } 
} 

let formData = new FormData();
// 给每个元素添加同名参数
members.forEach(member => {
    formData.append("member", member);
});

// 发送请求
fetch("YourServletName", {
    method: "POST",
    body: formData
})
.then(response => response.text())
.then(data => console.log("成功:", data));

方式B:拼GET请求URL

var members = []; 
var table = document.getElementById("my_table"); 
for(var i = 1; i < table.rows.length; i++) { 
    if(table.rows[i].getAttribute("checked")==="true") { 
        members.push(table.rows[i].id.substring(2)); 
    } 
} 

// 拼接成?member=xxx&member=yyy的格式
var params = members.map(member => `member=${encodeURIComponent(member)}`).join('&');
var url = `YourServletName?${params}`;
// 跳转或者用fetch发送
window.location.href = url;

步骤2:Servlet直接获取数组

这种方法最省心,直接用getParameterValues就能拿到数组:

request.setCharacterEncoding("UTF-8");
String[] membersArray = request.getParameterValues("member");
// membersArray就是你要的数组啦,记得判断是否为null
if (membersArray != null) {
    for (String member : membersArray) {
        // 处理每个元素
    }
}

额外注意事项

  • 不管用哪种方法,都要在Servlet开头设置request.setCharacterEncoding("UTF-8");,避免中文或者特殊字符乱码。
  • 如果用表单提交POST请求,建议给表单加上accept-charset="UTF-8"属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:16:25