在 JSP 開發中,頁面之間的數據傳遞是基礎且高頻的需求。本文系統整理了四種核心傳值方案,並附上可直接運行的代碼示例,幫助你快速選型並避開常見坑點。
最簡單的方式,適合非敏感、少量數據傳遞。
<!-- a.jsp -->
<a href="b.jsp?i=100">傳參</a>
<!-- b.jsp -->
<% String j = request.getParameter("i"); %>
<%= j %>
注意:中文參數需在 server.xml 配置 URIEncoding="UTF-8",否則會亂碼。
適用於同一次請求鏈路內的數據傳遞,數據不會暴露在 URL 中。
<!-- a.jsp -->
<% request.setAttribute("name", "Danny"); %>
<jsp:forward page="b.jsp" />
<!-- b.jsp -->
<% String getName = (String) request.getAttribute("name"); %>
<%= getName %>
此處必須使用 forward 而非 redirect,否則 request 域對象會丟失。
標準的用戶輸入收集方式,支援大量數據且相對安全。
<!-- a.jsp -->
<form action="b.jsp" method="post">
<input type="text" name="username" />
<input type="submit" value="提交" />
</form>
<!-- b.jsp -->
<% String getUserName = request.getParameter("username"); %>
<%= getUserName %>
在表單中隱藏不需用戶修改的數值,配合 POST 提交。
<!-- a.jsp -->
<%! int a = 4; %>
<form action="b.jsp" method="post">
<input type="hidden" name="b" value="<%= a %>" />
<input type="submit" value="傳遞" />
</form>
<!-- b.jsp -->
<% int c = Integer.parseInt(request.getParameter("b")); %>
<%= c %>
當表單字段較多時,使用 <jsp:useBean> 自動映射屬性,代碼更清晰。
<!-- Login.jsp -->
<form action="Deal.jsp" method="post">
用戶名:<input type="text" name="username"><br>
密碼:<input type="password" name="password"><br>
<input type="submit" value="登錄">
</form>
<!-- UserBean.java -->
package com;
public class UserBean {
private String username, password;
// getter/setter 省略
}
<!-- Deal.jsp -->
<jsp:useBean id="user" class="com.UserBean">
<jsp:setProperty name="user" property="*"/>
得到的用戶名為:<%= user.getUsername() %>
property="*" 表示自動匹配所有同名請求參數到 Bean 屬性,極大減少手工 setProperty 代碼。