getConnection()、PreparedStatement、資源關閉樣板代碼。TagSupport,內部持有 DataSource(從 JNDI 取得),封裝 executeQuery/executeUpdate。sql、dataSource、var)。// 1. 標籤處理類
package com.myactions;
public class MyActionTag extends TagSupport {
private String sql; // 對應屬性
public void setSql(String sql) { this.sql = sql; }
public int doEndTag() {
// 從 JNDI 取 DataSource,執行 SQL,將 ResultSet 存入 pageContext.setAttribute(var, rs)
return EVAL_PAGE;
}
}
// 2. TLD 片段
<tag>
<name>MyAction</name>
<tag-class>com.myactions.MyActionTag</tag-class>
<body-content>empty</body-content>
<attribute><name>sql</name><required>true</required></attribute>
<attribute><name>var</name><required>true</required></attribute>
</tag>
// 3. JSP 使用
<%@ taglib uri="/WEB-INF/tlds/mytags.tld" prefix="db" %>
<db:MyAction sql="SELECT * FROM users WHERE dept=?" var="rs" />
<c:forEach var="row" items="${rs}"> ... </c:forEach>
現代框架(Spring JDBC、MyBatis、JPA)已以更強大的方式解決此問題,標籤庫封裝 JDBC 屬於早期 JSP 模式,理解其設計思想有助於掌握聲明式資料存取演進脈絡。