JSP Action(動作)在請求處理階段執行,提供動態包含、JavaBean 操作、頁面轉發、外掛生成等運行時行為。六大標準 Action 涵蓋了 MVC 視圖層最常見的需求。
| Action | 用途 | 關鍵屬性 |
|---|---|---|
jsp:include | 請求期動態包含檔案 | page, flush |
jsp:useBean | 尋找或實例化 JavaBean | id, scope, class, type, beanName |
jsp:setProperty | 設定 Bean 屬性值 | name, property, param, value |
jsp:getProperty | 輸出 Bean 屬性值 | name, property |
jsp:forward | 請求轉發 | page |
jsp:plugin | 生成 Applet 瀏覽器標籤 | type, code, codebase, ... |
<%@ include file="..." %>):編譯期靜態合併,包含檔可含 JSP 代碼,效能高但靈活性低。<ol>
<li><jsp:include page="news/Item1.html" flush="true"/></li>
<li><jsp:include page="news/Item2.html" flush="true"/></li>
<li><jsp:include page="news/Item3.html" flush="true"/></li>
<li><jsp:include page="news/Item4.html" flush="true"/></li>
</ol>
修改四個片段即可更新首頁,無須動主頁代碼。
SimpleBean.java
package hall;
public class SimpleBean {
private String message = "No message specified";
public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
}
BeanTest.jsp
<jsp:useBean id="test" class="hall.SimpleBean" />
<jsp:setProperty name="test" property="message" value="Hello WWW" />
<h1>Message: <i><jsp:getProperty name="test" property="message" /></i></h1>
輸出:Message: Hello WWW
page(預設)、request、session、application,決定 Bean 可見範圍與生命週期。class:具體實現類,必須有無參建構子。type:介面/父類類型,配合 class 或 beanName 使用,編譯期類型檢查。beanName:Beans.instantiate() 可載入序列化 Bean 或類名,支援動態表達式。WEB-INF/lib 或伺服器 lib),而非 WebApp 專用 WEB-INF/classes 熱部署目錄,否則類載入器隔離導致 ClassNotFoundException。<!-- 自動映射所有同名請求參數 -->
<jsp:setProperty name="bean" property="*" />
<!-- 映射指定參數到不同名屬性 -->
<jsp:setProperty name="bean" property="userName" param="uname" />
<!-- 直接設定常值 -->
<jsp:setProperty name="bean" property="status" value="active" />