jsp 定制標(biāo)簽(Custom Tag)
更新時(shí)間:2009年01月07日 23:27:07 作者:
怎樣自己定制標(biāo)簽(Custom Tag)
(整理的學(xué)習(xí)筆記)
怎樣自己定制標(biāo)簽(Custom Tag)
(整理的學(xué)習(xí)筆記)
步驟1、創(chuàng)建一個(gè)Tag handler class(標(biāo)記處理器類)
package javax.servlet.jsp.tagext
開發(fā)空Body的標(biāo)簽處理器類----->1)implements Tag 2)extends TagSupport
空Body的標(biāo)簽處理器類需要覆蓋方法:
doStartTag()
返回值:Tag.SKIP_BODY
doEndTag()
返回值:
1)Tag.EVAL_PAGE:讓標(biāo)簽下面的內(nèi)容繼續(xù)執(zhí)行
2)Tag.SKIP_PAGE:讓標(biāo)簽下面的內(nèi)容不執(zhí)行
開發(fā)帶Body的標(biāo)簽處理器類----->1)implements BodyTag 2)extends BodyTagSupport
帶Body的標(biāo)簽處理器類需要覆蓋方法
doStartTag()
返回值:
BodyTag.SKIP_BODY:執(zhí)行后直接調(diào)用doEndTag()方法
BodyTag.EVAL_BODY_INCLUDE:執(zhí)行后直接調(diào)用doAfterBody()方法
BodyTag.EVAL_BODY_BUFFERED:
doEndTag()
返回值:
BodyTag.EVAL_PAGE:標(biāo)簽下面的內(nèi)容繼續(xù)執(zhí)行
BodyTag.SKIP_PAGE:標(biāo)簽下面的內(nèi)容不執(zhí)行
doAfterBody()
返回值:
BodyTag.SKIP_BODY:執(zhí)行后調(diào)用doEngTag()方法
BodyTag.EVAL_BODY_AGAIN:執(zhí)行后調(diào)用doAfterBody()方法
步驟2、創(chuàng)建一個(gè)tld文件(tag library descriptor)
一個(gè)XML格式的文件,用于對(duì)標(biāo)記進(jìn)行描述
通常放在WEB-INF目錄下 (/WEB-INF/*.tld)
abc.tld
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- template test -->
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>tagSample</short-name>
<uri>/tagSample</uri>
<description>A blank tag library template.</description>
<tag>
<name>welcome</name>
<tag-class>tagapp.HelloTag</tag-class>
<body-content>empty</body-content>
<display-name>my first tag</display-name>
<small-icon> </small-icon>
<large-icon> </large-icon>
<description> </description>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
步驟3.創(chuàng)建一個(gè)JSP文件
<%@taglib uri="[tld_url]" prefix=""%>
<%@taglib uri="/WEB-INF/abc.tld" prefix="mike"%>
...
<mike:welcome name=""/>
uri的值可以是:
A、/WEB-INF/mytag.tld -----> uri="/WEB-INF/mytag.tld"
B、tld文件中 <uri>/tagSample</uri> ------> uri="/tagSample"
C、利用web.xml文件映射tld文件與taglib-uri的值 -----> uri="/abc"
<taglib>
<taglib-uri>/abc</taglib-uri>
<taglib-location>/WEB-INF/mytag.tld</taglib-location>
</taglib>
帶Body的標(biāo)簽處理器類的方法的注釋:
doStartTag()
return value: SKIP_BODY 空BODY標(biāo)記
EVAL_BODY_INCLUDE 帶BODY標(biāo)記,執(zhí)行流程進(jìn)入doAfterBody
EVAL_BODY_BUFFERED 帶BODY標(biāo)記,執(zhí)行流程進(jìn)入setBodyContent
doEndTag()
return value: SKIP_PAGE 忽略標(biāo)記后剩余的JSP內(nèi)容
EVAL_PAGE 繼續(xù)執(zhí)行標(biāo)記后剩余的JSP內(nèi)容
doAfterBody()
return value: SKIP_BODY 結(jié)束doAfterBody()方法,流程進(jìn)入doEndTag()
EVAL_BODY_AGAIN 繼續(xù)執(zhí)行doAfterBody()方法
SimpleTagSupport
較好的練習(xí)題:
一、
1、模仿jstl標(biāo)簽庫開發(fā)下列標(biāo)簽:
1)<sql:setDataSource>
屬性有:
driver:必須的,可以用表達(dá)式
url;必須的,可以用表達(dá)式
user:必須的,可以用表達(dá)式
password:必須的,可以用表達(dá)式
2)<sql:query>
屬性有:
dataSource:必須的,可以用表達(dá)式
sql:必須的,可以用表達(dá)式
3)<sql:update>
屬性有:
dataSource:必須的,可以用表達(dá)式
sql:必須的,可以用表達(dá)式
2、開發(fā)類似于<c:forEach>的標(biāo)簽,可以遍歷一個(gè)集合對(duì)象(可選,如不能完成,可直接利用jstl的標(biāo)簽來完成)
(整理的學(xué)習(xí)筆記)
步驟1、創(chuàng)建一個(gè)Tag handler class(標(biāo)記處理器類)
package javax.servlet.jsp.tagext
開發(fā)空Body的標(biāo)簽處理器類----->1)implements Tag 2)extends TagSupport
空Body的標(biāo)簽處理器類需要覆蓋方法:
doStartTag()
返回值:Tag.SKIP_BODY
doEndTag()
返回值:
1)Tag.EVAL_PAGE:讓標(biāo)簽下面的內(nèi)容繼續(xù)執(zhí)行
2)Tag.SKIP_PAGE:讓標(biāo)簽下面的內(nèi)容不執(zhí)行
開發(fā)帶Body的標(biāo)簽處理器類----->1)implements BodyTag 2)extends BodyTagSupport
帶Body的標(biāo)簽處理器類需要覆蓋方法
doStartTag()
返回值:
BodyTag.SKIP_BODY:執(zhí)行后直接調(diào)用doEndTag()方法
BodyTag.EVAL_BODY_INCLUDE:執(zhí)行后直接調(diào)用doAfterBody()方法
BodyTag.EVAL_BODY_BUFFERED:
doEndTag()
返回值:
BodyTag.EVAL_PAGE:標(biāo)簽下面的內(nèi)容繼續(xù)執(zhí)行
BodyTag.SKIP_PAGE:標(biāo)簽下面的內(nèi)容不執(zhí)行
doAfterBody()
返回值:
BodyTag.SKIP_BODY:執(zhí)行后調(diào)用doEngTag()方法
BodyTag.EVAL_BODY_AGAIN:執(zhí)行后調(diào)用doAfterBody()方法
步驟2、創(chuàng)建一個(gè)tld文件(tag library descriptor)
一個(gè)XML格式的文件,用于對(duì)標(biāo)記進(jìn)行描述
通常放在WEB-INF目錄下 (/WEB-INF/*.tld)
abc.tld
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- template test -->
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>tagSample</short-name>
<uri>/tagSample</uri>
<description>A blank tag library template.</description>
<tag>
<name>welcome</name>
<tag-class>tagapp.HelloTag</tag-class>
<body-content>empty</body-content>
<display-name>my first tag</display-name>
<small-icon> </small-icon>
<large-icon> </large-icon>
<description> </description>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
步驟3.創(chuàng)建一個(gè)JSP文件
<%@taglib uri="[tld_url]" prefix=""%>
<%@taglib uri="/WEB-INF/abc.tld" prefix="mike"%>
...
<mike:welcome name=""/>
uri的值可以是:
A、/WEB-INF/mytag.tld -----> uri="/WEB-INF/mytag.tld"
B、tld文件中 <uri>/tagSample</uri> ------> uri="/tagSample"
C、利用web.xml文件映射tld文件與taglib-uri的值 -----> uri="/abc"
<taglib>
<taglib-uri>/abc</taglib-uri>
<taglib-location>/WEB-INF/mytag.tld</taglib-location>
</taglib>
帶Body的標(biāo)簽處理器類的方法的注釋:
doStartTag()
return value: SKIP_BODY 空BODY標(biāo)記
EVAL_BODY_INCLUDE 帶BODY標(biāo)記,執(zhí)行流程進(jìn)入doAfterBody
EVAL_BODY_BUFFERED 帶BODY標(biāo)記,執(zhí)行流程進(jìn)入setBodyContent
doEndTag()
return value: SKIP_PAGE 忽略標(biāo)記后剩余的JSP內(nèi)容
EVAL_PAGE 繼續(xù)執(zhí)行標(biāo)記后剩余的JSP內(nèi)容
doAfterBody()
return value: SKIP_BODY 結(jié)束doAfterBody()方法,流程進(jìn)入doEndTag()
EVAL_BODY_AGAIN 繼續(xù)執(zhí)行doAfterBody()方法
SimpleTagSupport
較好的練習(xí)題:
一、
1、模仿jstl標(biāo)簽庫開發(fā)下列標(biāo)簽:
1)<sql:setDataSource>
屬性有:
driver:必須的,可以用表達(dá)式
url;必須的,可以用表達(dá)式
user:必須的,可以用表達(dá)式
password:必須的,可以用表達(dá)式
2)<sql:query>
屬性有:
dataSource:必須的,可以用表達(dá)式
sql:必須的,可以用表達(dá)式
3)<sql:update>
屬性有:
dataSource:必須的,可以用表達(dá)式
sql:必須的,可以用表達(dá)式
2、開發(fā)類似于<c:forEach>的標(biāo)簽,可以遍歷一個(gè)集合對(duì)象(可選,如不能完成,可直接利用jstl的標(biāo)簽來完成)
您可能感興趣的文章:
- JSP自定義分頁標(biāo)簽TAG全過程
- JSP自定義標(biāo)簽Taglib實(shí)現(xiàn)過程重點(diǎn)總結(jié)
- JS 創(chuàng)建對(duì)象(常見的幾種方法)
- JavaScript 三種創(chuàng)建對(duì)象的方法
- Js動(dòng)態(tài)創(chuàng)建div
- js實(shí)現(xiàn)創(chuàng)建刪除html元素小結(jié)
- js 用CreateElement動(dòng)態(tài)創(chuàng)建標(biāo)簽示例
- javascript轉(zhuǎn)換字符串為dom對(duì)象(字符串動(dòng)態(tài)創(chuàng)建dom)
- JS動(dòng)態(tài)創(chuàng)建DOM元素的方法
- JS中動(dòng)態(tài)創(chuàng)建元素的三種方法總結(jié)(推薦)
- 淺析JS動(dòng)態(tài)創(chuàng)建元素【兩種方法】
- JS創(chuàng)建Tag標(biāo)簽的方法詳解
相關(guān)文章
java解析出url請(qǐng)求的路徑和參數(shù)鍵值對(duì)類(解析出url請(qǐng)求的路徑,包括頁面)
解析url,本想用正則表達(dá)式處理,但正則表達(dá)式速度較慢。用split處理一下就可以了2012-06-06jsp實(shí)現(xiàn)簡(jiǎn)單用戶7天內(nèi)免登錄
這篇文章主要為大家詳細(xì)介紹了jsp實(shí)現(xiàn)簡(jiǎn)單用戶7天內(nèi)免登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02JSP中實(shí)現(xiàn)系統(tǒng)登錄后的退出原理及代碼
首先要在你登錄的頁面的某個(gè)地方,寫上一個(gè)超級(jí)鏈接,讓它鏈接到exit.jsp頁面去,然后新建一個(gè)exit.jsp頁面在其body中寫上如下代碼,即可以實(shí)現(xiàn)登錄后的退出,感興趣的朋友可以了解下啊,或許對(duì)你有所幫助2013-01-01