自定義標簽庫並不是 JSP 2 才出現的,JSP 1.1 版中已經增加了自定義標簽 庫規范,自定義標簽庫是一種非常優秀的表現層組件技術。通過使用自定義標簽 庫,可以在簡單的標簽中封裝復雜的功能。
為什麼要使用自定義標簽呢?主要是為了取代丑陋的 JSP 腳本。在 HTML 頁 面中插入 JSP 腳本有如下幾個壞處:
JSP 腳本非常丑陋,難以閱讀。
JSP 腳本和 HTML 代碼混雜,維護成本高。
HTML 頁面中嵌入 JSP 腳本,導致美工人員難以參與開發。
出於以上三點的考慮,我們需要一種可在頁面中使用的標簽,這種標簽具有和 HTML 標簽類似的語法,但由可以完成 JSP 腳本的功能——這種標簽就是 JSP 自 定義標簽。
在 JSP1.1 規范中開發自定義標簽庫比較復雜,JSP 2 規范簡化了標簽庫的開 發,在 JSP 2 中開發標簽庫只需如下幾個步驟:
開發自定義標簽處理類;
建立一個 *.tld 文件,每個 *.tld 文件對應一個標簽庫,每個標簽庫對應多 個標簽;
在 JSP 文件中使用自定義標簽。
開發自定義標簽類
標簽庫和實際開發
標簽庫是非常重要的技術,通常來說,初學者、普通開發人員自己開發標簽庫 的機會很少,但如果希望成為高級程序員,或者希望開發通用框架,就需要大量 開發自定義標簽了。所有的 MVC 框架,如 Struts 2、SpringMVC、JSF 等都提供 了豐富的自定義標簽。
當我們在 JSP 頁面使用一個簡單的標簽時,底層實際上由標簽處理類提供支 持,從而可以使用簡單的標簽來封裝復雜的功能,從而使團隊更好地協作開發( 能讓美工人員更好地參與 JSP 頁面的開發)。
早期 JSP 自定義標簽類開發過程略微復雜一些,但 JSP 2 已經簡化了這個過 程,它只要自定義標簽類都必須繼承一個父類: javax.servlet.jsp.tagext.SimpleTagSupport,除此之外,JSP 自定義標簽類還 有如下要求。
如果標簽類包含屬性,每個屬性都有對應的 getter 和 setter 方法。
重寫 doTag() 方法,這個方法負責生成頁面內容。
下面開發一個最簡單的自定義標簽,該標簽負責在頁面上輸出 HelloWorld。
// 標簽處理類,繼承 SimpleTagSupport 父類
public class HelloWorldTag extends SimpleTagSupport
{
// 重寫 doTag 方法,該方法在標簽結束生成頁面內容
public void doTag()throws JspException,
IOException
{
// 獲取頁面輸出流,並輸出字符串
getJspContext().getOut().write("Hello World");
}
}
上面這個標簽處理類非常簡單,它繼承了 SimpleTagSupport 父類,並重寫 doTag() 方法,而 doTag() 方法則負責輸出頁面內容。該標簽沒有屬性,因此無 須提供 setter 和 getter 方法。