JSP 頁面用 JS 組裝 JSON,AJAX POST 發送,Servlet 用 Jackson/Gson 反序列化。
// JSP (JS)
const list = [{id:1,name:'A'},{id:2,name:'B'}];
fetch('/submit', {
method: 'POST',
headers: {'Content-Type':'application/json'},
body: JSON.stringify(list)
});
// Servlet
List<Item> items = new ObjectMapper().readValue(request.getInputStream(),
new TypeReference<List<Item>>(){});
JSP 生成同名輸入框 name="items[0].id",Spring MVC 自動綁定 List<Item> items。
<c:forEach items="${list}" var="item" varStatus="vs">
<input name="items[${vs.index}].id" value="${item.id}">
<input name="items[${vs.index}].name" value="${item.name}">
</c:forEach>
// JSP
session.setAttribute("tempList", list);
response.sendRedirect("servletUrl");
// Servlet
List<Item> list = (List<Item>) session.getAttribute("tempList");
session.removeAttribute("tempList");
| 方案 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|
| JSON + AJAX | 前後端分離、複雜對象 | 類型安全、跨語言、異步體驗好 | 需引入 Jackson/Gson |
| 表單數組 | 傳統 JSP + Spring MVC | 零依賴、瀏覽器原生支援 | 僅限簡單對象、大數據量 URL 超長 |
| Session | 頁面跳轉傳遞、臨時數據 | 簡單、無大小限制 | 佔用 Session 內存、需手動清理 |
現代項目首選 JSON + AJAX,配合 RESTful API 實現前後端分離;維護舊項目可用 表單數組 快速對接 Spring MVC;Session 僅作臨時過渡。切記:集合泛型在運行期擦除,反序列化時需用 TypeReference 保留類型信息。