<jsp:forward> 在伺服器端將請求轉發至另一資源(JSP/Servlet/HTML),瀏覽器 URL 不變,屬於一次請求鏈。語法支援靜態路徑或動態表達式,並可附加參數。
<jsp:forward page="{relativeURL | <%= expr %>}" />
<jsp:forward page="{relativeURL | <%= expr %>}">
<jsp:param name="paramName" value="{paramValue | <%= expr %>}" />+
</jsp:forward>
test1.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html><body>
<jsp:forward page="/test2.jsp" />
</body></html>
test2.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html><body>
<% out.println("這是 test2.jsp 產生的輸出"); %>
</body></html>
瀏覽器訪問 test1.jsp 直接顯示 test2.jsp 的輸出,地址欄仍為 test1.jsp。
test3.jsp
<jsp:forward page="/test4.jsp">
<jsp:param name="name" value="powerman" />
<jsp:param name="address" value="北京西大街188號" />
</jsp:forward>
test4.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html><body>
<%
out.println("姓名:" + request.getParameter("name") + "<br>");
out.println("地址:" + request.getParameter("address") + "<br>");
%>
</body></html>
輸出:
姓名:powerman
地址:北京西大街188號
out 已輸出內容且緩衝未刷新,呼叫 forward 會拋 IllegalStateException。解決:頁面開頭設 <%@ page buffer="none" %> 或確保前無輸出。<jsp:param> 實際是向 request.setAttribute() 放入臨時屬性,目標頁用 request.getParameter() 即可取得,等同表單提交。/ 開頭相對 Web 應用根目錄;否則相對當前 JSP 目錄。