開發自定義標簽步驟
1.創建自定義標簽處理類(Tag Handler Class)
2.創建TLD標簽庫描述文件(Tag Library Desciptor)
web應用使用標簽:
1.標簽處理類和相關類.class文件放到WEB-INF/CLASS目錄下
2.把TLD放到WEB-INF或者其自定義的子目錄下
3.在web.xml中聲明引用的標簽庫
4.在jsp中使用標簽庫中的標簽。
JSP TAG API
運行jsp文件時遇到自定義的標簽,就會調用這個標簽的處理類相關方法。處理類可以繼承TagSupport類或者BodyTagSupport。
JspTag接口
這是一個標識接口,沒有任何方法。作為Tag和SimpleTag的共同接口。實現Tag接口的標簽為傳統標簽。實現SimpleTag的標簽為簡單標簽。
Tag接口
setPageContext(PageContext pc)//servlet容器調用這個方法,像當前Tag對象傳遞PageContext對象setParent(Tag t)//設置父標簽getParent()release()//釋放Tag占用的資源時調用doStartTag()當servlet容器遇到標簽起始標志時調用這個方法,返回一個整數值,決定后續流程Tag.SKIP_BODY表示標簽內主體內容被忽略Tag.EVAL_BODY_INCLUDE表示標簽內主體被正常執行doEndTag()//標簽結束時調用。返回整數值,決定后面流程Tag.SKIP_PAGE 標簽后面的內容不執行,把已有的內容返回Tag.EVAL_PAGE 正常執行jsp代碼執行jsp內容遇到自定義標簽,就回去找Tag對象,沒找到就創建一個,放到緩存中重復使用(web應用被終止是會調用relesse()方法)。創建完對象后調用對象相關方法。1.servlet容器調用setPageContext(PageContext pc),setParent(Tag t),不存在父標簽就設置null.2.servlet容器調用一系列set方法,設置屬性,沒有屬性就不用。
3.doStartTag()根據返回值做相關處理。
4.doEndTag()根據返回值做相關處理。
IterationTag接口
繼承Tag接口,增加了反復執行主體內容的功能。
doAfterBody()方法在執行玩主體內容后調用,不執行主體內容不調用。
返回整數值,決定是否重復執行。
Tag.SKIP_BODY不重復執行主體內容了
Tag.EVAL_BODY_AGAIN重復執行標簽主體內容
BodyTag接口--添加了直接訪問和操縱標簽主體的功能
setBodyContent(BodyContent bc)傳遞一個用于緩存標簽結果的BodyContent對象。
doInitBody():setBodyContent()執行完后,執行標簽主體之前調用,為執行標簽主體做初始化工作。
標簽主體為空或者doStartTag返回skip_body或者eval_body_include,上面兩個方法不執行。
標簽主體不為空以及doStartTag返回BodyTag.EVAL_BODY_BUFFERED才執行。
TagSupport和BodyBodySupport--自定義的標簽繼承這兩個中的一個就行了。
創建message標簽的處理類messageTag
1.創建資源文件
xxx.PRoperties放在WEB-INF目錄下,使用鍵值對的形式。
2.web啟動時加載資源文件
用一個servlet來加載資源文件,設置start-on-load為1,啟動時就加載。保存在應用范圍內。
3.創建messageTag
創建標簽庫描述文件
采用XML格式,其中元素分為3類:
<taglib>標簽庫元素
<tag>標簽元素
<attribute>標簽屬性元素
1.taglib
tlib-version標簽庫版本
jsp-version jsp版本
short-name 標簽庫前綴名(prefix)
uri 設定標簽庫的唯一訪問標識符
info 說明信息
2.tag
name 設置標簽的名字
tag-class 處理類
body-content 標簽主體類型 empty主體為空,scriptless主體不為空,包含EL表達式和jsp內置標簽。jsp主體不為空,比scriptless多了一個腳本元素<%! %>等等。tagdependant 主體不為空,標簽主體內容由處理類解析處理。
info 說明信息
3.attribute
name 屬性名
required 屬性是否為必須,默認false
rtexprvalue 屬性值是否可以基于<%=%>等java表達式和EL表達式
把文件命名問xxx.tld
在web應用中使用標簽
在web.xml加入taglib
<taglib><taglib-uri></taglib-uri>//標簽庫唯一標識符<taglib-location></taglib-location>//tld文件位置</taglib>然后使用jsp就可以訪問<標簽庫的短名稱:tag屬性的name 屬性=屬性值 /><%@ taglib prefix="xx" uri="/xxx"%>
新聞熱點
疑難解答