首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JSP 頁面跳轉實戰: 動作標籤完整用法與參數傳遞

     編輯:Java 相關知識

<jsp:forward> 是 JSP 核心動作標籤,實現服務端內部轉發:請求對象保持不變,目標頁面共享同一 Request 上下文,瀏覽器 URL 不變。比 response.sendRedirect() 更高效、更安全(參數不暴露在地址欄)。

語法結構

<jsp:forward page="{relativeURL | <%= expression %>}" />

<jsp:forward page="{relativeURL | <%= expression %>}">
    <jsp:param name="paramName" value="{paramValue | <%= expression %>}" />+
</jsp:forward>

基本轉發範例

<!-- test1.jsp -->
<jsp:forward page="/test2.jsp" />

<!-- test2.jsp -->
<% out.println("這是 test2.jsp 產生的輸出"); %>

瀏覽器訪問 test1.jsp 直接顯示 test2.jsp 輸出,地址欄仍為 test1.jsp。

帶參數轉發:解決 GET 長度限制與安全性

<!-- source.jsp -->
<jsp:forward page="/target.jsp">
    <jsp:param name="username" value="powerman" />
    <jsp:param name="address" value="北京西大街188號" />
</jsp:forward>

<!-- target.jsp -->
<%
    String name = request.getParameter("username");
    String addr = request.getParameter("address");
    out.println("姓名:" + name + "<br/>");
    out.println("地址:" + addr + "<br/>");
%>

輸出:

姓名:powerman
地址:北京西大街188號

進階用法與注意點

  • 動態目標頁面:page="<%= computeTargetPage() %>" 實現運行時路由。
  • 轉發前輸出緩衝區必須為空:若前已有 out.println() 或模板文本輸出且緩衝區已 flush(),將拋出 IllegalStateException。解決:頁面指令 <%@ page buffer="16kb" autoFlush="false" %> 或確保轉發前無輸出。
  • 參數覆蓋規則:<jsp:param> 同名參數會覆蓋原請求參數,目標頁面 request.getParameter() 取到新值。
  • 適用範圍:同一 Web 應用內部資源(JSP/Servlet/HTML),跨應用需用 ServletContext.getContext() 跨上下文轉發。

對比:forward vs include vs redirect

特性<jsp:forward><jsp:include>response.sendRedirect()
請求對象共享共享新請求
瀏覽器 URL不變不變改變
執行流程控制權永久移交包含片段後返回客戶端跳轉
跨應用需特殊配置需特殊配置天然支援

掌握 <jsp:forward> 及參數傳遞,是構建清晰 MVC 流程、實現業務邏輯分層的基礎技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved