為什么使用自定義標(biāo)簽
減少在jsp寫java代碼狱意。簡(jiǎn)言之,就是簡(jiǎn)化jsp。
如何創(chuàng)建自定義標(biāo)簽
1稿黍、方式一 :實(shí)現(xiàn)接口方式 SimpleTag
2、方式二 :通過(guò)繼承類? SimpleTagSupport
? ? 開發(fā)步驟:
? ? ? ? ? ? 1崩哩、實(shí)現(xiàn)SimpleTag或者繼承SimpleSupportTag
? ? ? ? ? ? 2巡球、實(shí)現(xiàn)或者重寫方法
? ? ? ? ? ? 3、在WEB-INF下面新建一個(gè)xx.tld文件用來(lái)描述標(biāo)簽
? ? ? ? ? ? 4邓嘹、在jsp引入
實(shí)現(xiàn)接口方式 SimpleTag
? ? ? ? 一
如上圖酣栈,實(shí)現(xiàn)接口方式 SimpleTag需要實(shí)現(xiàn)下面這五個(gè)方法
? ? ? ? ? ? 1、setJspContext()
? ? ? ? ? ? ? ? ? ? 設(shè)置(獲刃谘骸)上下文
? ? ? ? ? ? 2矿筝、setJspBody()
? ? ? ? ? ? ? ? ? ? 獲取標(biāo)簽體
? ? ? ? ? ? 3、setParent()
? ? ? ? ? ? ? ? ? ? 設(shè)置父標(biāo)簽
? ? ? ? ? ? 4棚贾、getParent()
? ? ? ? ? ? ? ? ? ? 獲取父標(biāo)簽
? ? ? ? ? ? 5窖维、doTag()
? ? ? ? ? ? ? ? ? ? ? 在這個(gè)方法里面操作我們想要實(shí)現(xiàn)功能的相關(guān)邏輯
? ? ? ? 二、在WEB-INF目錄下新建一個(gè)test.tld文件,內(nèi)容如下
? ? ? ? ? 三妙痹、在jsp引入铸史,如圖
? 接下來(lái)修改IPTag1.java代碼,如下圖
將項(xiàng)目部署到tomcat怯伊,運(yùn)行琳轿,在瀏覽器輸入http://localhost:8080/Day22/test.jsp,瀏覽器出現(xiàn)如下圖:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
通過(guò)繼承類 SimpleTagSupport
基本和上面的操作一樣耿芹,只不過(guò)要重寫相關(guān)的方法
如doTag(),廢話不多說(shuō)利赋,直接截圖:
正如你所見,SimpleTagSupport已經(jīng)幫我們做好了相關(guān)事情猩系,我們只需在doTag做相關(guān)的操作就可以了媚送。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在test.tld中,body-content中有以下幾個(gè)值:
body-contetn: 用來(lái)描述標(biāo)簽體的信息
? ? ? ? ? ? ? ? ? ? empty? ? ? ? ? 沒有標(biāo)簽體
? ? ? ? ? ? ? ? ? ? tagdependent? 將內(nèi)容原封不動(dòng)交給標(biāo)簽處理
? ? ? ? ? ? ? ? ? ? scriptless? ? 標(biāo)簽體的內(nèi)容可以是文本寇甸、el塘偎、其他標(biāo)簽【不要用jsp的腳本】
? ? ? ? ? ? ? ? ? ? JSP? ? ? ? ? ? jsp腳本,el...
一般開發(fā)中我們選擇scriptless就可以了。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
使用場(chǎng)景:
|--直接輸出內(nèi)容
|--控制輸出還是不輸出
|--控制是否要執(zhí)行標(biāo)簽體后的內(nèi)容
|--處理標(biāo)簽體的內(nèi)容
|--根據(jù)標(biāo)簽的屬性處理不同業(yè)務(wù)邏輯(比如:控制循環(huán)次數(shù))
標(biāo)簽案例
|--獲取客戶端的ip
|--驗(yàn)證simgTag執(zhí)行順序()
|--輸出內(nèi)容
|--跳過(guò)標(biāo)簽體之后的內(nèi)容? SkipPageException
|--處理標(biāo)簽體內(nèi)容
|--循環(huán)
|--循環(huán)(通過(guò)屬性控制次數(shù))
|--防盜鏈標(biāo)簽
|--模仿