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

JSP 動作元素完整指南:include、forward、param、plugin 與 fallback 詳細用法

     編輯:Java 綜合教學

JSP 動作元素完整指南

JSP 動作元素提供請求處理階段的動態行為,與指令元素(編譯階段)本質不同。本文系統講解 5 大核心動作元素的語法、差異與實戰場景。

一、動作元素 vs 指令元素核心差異

維度指令元素 (<%@ %>)動作元素 (<jsp:xxx>)
執行階段編譯階段(翻譯為 Servlet 時)請求處理階段(每次請求執行)
包含機制靜態包含(原始碼合併)動態包含(結果合併)
資源類型僅 JSP/靜態檔任何資源
參數傳遞不支援支援 <jsp:param>

二、核心動作元素詳細解析

1. <jsp:include> - 動態包含






    
    



執行流程:

  1. 當前頁面執行到 include 標籤
  2. 暫停當前頁面,轉發請求到目標頁面
  3. 目標頁面完整執行(含業務邏輯、輸出)
  4. 目標頁面輸出結果合併到當前頁面回應流
  5. 繼續執行當前頁面後續內容

vs <%@ include file="..." %>:

  • 指令:編譯期合併原始碼 → 單一 Servlet → 共享變數作用域
  • 動作:執行期合併輸出 → 獨立 Servlet 執行 → 隔離變數作用域

2. <jsp:forward> - 請求轉發




    
    

關鍵特性:

  • 伺服器端跳轉:瀏覽器 URL 不變
  • 請求物件共享:forward 前後共享同一 request/response
  • 執行終止:forward 之後的程式碼不會執行
  • 緩衝區處理:若前已有輸出且緩衝區未滿,會清空緩衝區再轉發;若緩衝區已衝刷 → 拋出 IllegalStateException
<%-- 正確模式:邏輯判斷後 forward --%>
<%
    if (user.isAdmin()) {
%>

<%
    } else {
%>

<%
    }
%>

3. <jsp:param> - 參數傳遞

    
    
    



    

參數獲取:目標頁面使用 ${param.keyword} 或 request.getParameter("keyword") 獲取。

4. <jsp:plugin>、<jsp:params>、<jsp:fallback> - Applet/JavaBean 嵌入(歷史遺留)

    
        
    
    
        

您的瀏覽器不支援 Java Applet,請安裝 JRE 或使用現代替代方案。

  • plugin:生成 <object>/<embed> 標籤載入 Applet/JavaBean
  • params:傳遞啟動參數
  • fallback:不支援時的降級提示
  • 現狀:瀏覽器已全面停用 NPAPI,Applet 技術已淘汰,僅維護舊系統時涉及

5. <jsp:fallback> 獨立用法(罕見)




    
    
    

2. 表單提交後轉發(PRG 模式)

    
    



<%
    String username = request.getParameter("username");
    boolean success = userService.register(username);
    if (success) {
%>

    

<%
    } else {
%>

    

<%
    }
%>

3. 避免緩衝區衝刷導致 forward 失敗



    
        *.jsp
        16kb
        false
    

四、常見陷阱與排查

問題原因解決
forward 後程式碼仍執行誤以為 forward 如 returnforward 後加 return;或用 if-else 包裹
IllegalStateException緩衝區已衝刷後 forward增大 buffer、關閉 autoFlush、前置邏輯判斷
include 參數獲取不到參數名拼寫錯誤/作用域混淆使用 ${param.name} 統一獲取請求參數
中文參數亂碼ISO-8859-1 編碼問題Tomcat 8+ 通常自動處理;舊版需 filter 設定 UTF-8
循環包含A include B,B include A檢查包含鏈,JSP 容器會拋出異常終止

五、現代替代方案

現代 Spring Boot / Spring MVC 專案建議:

  • Thymeleaf/FreeMarker:th:insert、th:replace 替代 include
  • Controller 層:return "forward:/target"、return "redirect:/target" 替代 forward
  • 片段抽取:@ModelAttribute、Fragment 替代 param 傳遞

JSP 動作元素雖在現代框架中較少直接使用,但理解其請求處理階段動態特性、請求轉發與包含的語義差異、緩衝區與執行流程控制,對維護舊系統、理解 Servlet 容器行為、排查頁面渲染問題仍具核心價值。

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