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

JSP 動作元素完整指南

     編輯:JSP 入門

JSP 動作元素完整指南

JSP 動作元素 (jsp:xxx) 以 XML 語法在請求處理階段執行,不同於編譯階段生效的指令元素。提供動態包含、JavaBean 操作、轉發、外掛程式產生、XML 操作等功能。


通用語法與屬性

<jsp:action_name attribute="value" />

所有動作元素支援兩個通用屬性:

  • id:唯一識別碼,可在 pageContext 中取得
  • scope:生命週期範圍 — page (預設)、request、session、application

核心動作元素詳細說明

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

<jsp:include page="relativeURL" flush="true" />
  • 請求時包含:目標頁面獨立編譯、執行,結果合併到當前回應
  • 可傳遞參數:<jsp:param name="key" value="value" />
  • flush="true":包含前先刷新緩衝區 (必要)
  • 與 <%@ include %> 差異:指令為編譯期靜態合併,動作為執行期動態合併

範例

<%-- header.jsp --%>
<header>網站標題</header>

<%-- main.jsp --%>
<jsp:include page="header.jsp" flush="true" />
<jsp:include page="footer.jsp" flush="true" />

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

<jsp:forward page="relativeURL" />
  • 終止當前頁面執行,將請求轉發給目標資源 (JSP/Servlet/HTML)
  • 瀏覽器網址不變,Request 物件共享
  • 可攜帶參數:<jsp:param>
  • 目標可為動態運算式:page="<%= targetPage %>"

範例

<%
  if (!user.hasPermission("admin")) {
%>
  <jsp:forward page="/error/403.jsp" />
<%
  }
%>

3. JavaBean 相關動作

<jsp:useBean> — 尋找或建立 Bean

<jsp:useBean id="user" class="com.example.User" scope="session" />
  • 嘗試從指定範圍取得同 id 的 Bean
  • 不存在則用 class 實例化 (需無參建構子)
  • type:指定參考型別 (介面/父類別)
  • beanName:搭配 java.beans.Beans.instantiate()

<jsp:setProperty> — 設定 Bean 屬性

<!-- 1. 設定單一屬性 -->
<jsp:setProperty name="user" property="username" value="admin" />

<!-- 2. 自動對應請求參數 (名稱相同) -->
<jsp:setProperty name="user" property="*" />

<!-- 3. 指定請求參數名稱不同 -->
<jsp:setProperty name="user" property="email" param="userEmail" />
  • 置於 useBean 內部:僅在 Bean 新建立時執行
  • 置於 useBean 外部:每次請求皆執行

<jsp:getProperty> — 輸出 Bean 屬性

<jsp:getProperty name="user" property="username" />
  • 自動呼叫 getter,轉字串輸出 (等同 out.print(bean.getProperty()))
  • 屬性不存在或為 null 輸出空字串

完整範例:表單資料綁定 Bean

<%-- User.java --%>
public class User {
  private String username, email;
  // getter/setter...
%>

<%-- form.jsp --%>
<jsp:useBean id="user" class="com.example.User" scope="request">
  <jsp:setProperty name="user" property="*" /> <%-- 僅首次建立時自動綁定 --%>
</jsp:useBean>
<form action="process.jsp" method="post">
  姓名:<input name="username" value="<jsp:getProperty name='user' property='username'/>"><br>
  Email:<input name="email" value="<jsp:getProperty name='user' property='email'/>"><br>
  <button type="submit">送出</button>
</form>

4. <jsp:plugin> — Java Applet/Bean 外掛 (已淘汰)

依瀏覽器產生 <object> 或 <embed> 標籤載入 Applet。現代瀏覽器不再支援 NPAPI,不建議使用。

5. XML 動態建構動作

<jsp:element name="elementName">
  <jsp:attribute name="attrName">attrValue</jsp:attribute>
  <jsp:body>element content</jsp:body>
</jsp:element>
  • 動態產生 XML 元素、屬性、內文
  • 名稱、值可為運算式

範例

<jsp:element name="book">
  <jsp:attribute name="isbn"><%= isbn %></jsp:attribute>
  <jsp:body>
    <jsp:element name="title"><jsp:body><%= title %></jsp:body></jsp:element>
    <jsp:element name="author"><jsp:body><%= author %></jsp:body></jsp:element>
</jsp:element>

6. <jsp:text> — 模板文字

<jsp:text>純文字內容</jsp:text>
  • 輸出不含任何 JSP 元素的純文字
  • XML 文件中避免 > 字元衝突:<jsp:text><![CDATA[ <br> ]]></jsp:text>
  • 宣告 DOCTYPE:<jsp:text><![CDATA[ <!DOCTYPE html> ]]></jsp:text>

動作元素 vs 指令元素 vs Scriptlet 比較

類別語法執行階段典型用途
指令<%@ page ... %>編譯期 (翻譯成 Servlet)頁面屬性、包含檔案、標籤庫宣告
Scriptlet<% java code %>請求處理期 (_jspService)任意 Java 邏輯 (不建議濫用)
動作元素<jsp:include ... />請求處理期動態包含、Bean 操作、轉發、XML 產生
EL 運算式${expr}請求處理期資料輸出、簡單運算、存取範圍屬性

最佳實踐

  1. 動態包含用 <jsp:include>,靜態檔案 (頁首/頁尾) 可用 <%@ include %> 效能較好。
  2. 表單資料綁定 Bean:useBean + setProperty(property="*") 替代手動 request.getParameter()。
  3. 轉發用 <jsp:forward>,重導向用 response.sendRedirect() (PRG 模式)。
  4. 避免使用 <jsp:plugin>,Applet 技術已淘汰。
  5. 現代專案建議:改用 Thymeleaf/FreeMarker 模板引擎 + Spring MVC,JSP 動作元素逐漸被取代。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved