天天看點

java ee tag标簽檔案_JavaEE-JSP基礎-自定義标簽

作用:

雖然JSTL标準标簽庫提供了很多通用标簽,

但實際開發需求複雜多變,

這些通用标簽是不能完全在JSP頁面替代java代碼,

是以需要我們自定義标簽來替代java代碼!

1.傳統标簽

1).原理

Tag接口

|---IterationTag接口

|---TagSupport類--

|---BodyTag接口 |

BodyTagSupprot類

Tag生命周期:

第一次使用時建立執行個體,從此駐留記憶體重複利用,每次都會依次執行:

setPageContext(PageContext pc) 傳入jsp對象

setParent(Tag t) 傳入父标簽

doStartTag() 通過傳回值來控制标簽體是否執行

doEndTag() 通過傳回值控制标簽後jsp頁面是否執行

release() 伺服器停止前調用銷毀對象

2).自定義步驟:

1).編寫一個類實作Tag接口

2).編寫一個tld檔案描述Tag類

3).在jsp頁面中引入tld檔案

傳統标簽自定義相當繁瑣,需分析開始标簽和結束标簽時,還需分析傳回标簽體控制程式,

一般不推薦使用,簡單标簽SimpleTag更友善開發!

2.簡單标簽

1).原理

SimpleTag接口

|---SimpleTagSupport實作類

SimpleTag生命周期:

每次通路标簽時都建立簡單标簽對象,用完即銷毀。

setJspContext(JspContext pc) 傳入目前jsp的PageContext對象

setParent(JspTag parent) 若标簽有父标簽,則調用傳入

setXXX() 若标簽有屬性,則調用傳入

setJspBody(JspFragment jspBody) 若标簽有标簽體,則調用傳入

doTag() 處理标簽替代的java代碼

2).自定義步驟

1).編寫一個類繼承SimpleTagSupport,覆寫doTag(),調用getJspContext/getJspBody擷取JSP内容;

public class MyTag extends SimpleTagSupport {

@Override

public void doTag(){

// 标簽體重複輸出

for(int i=0;i

getJspBody().invoke(null);

}

// 自定義标簽屬性attr

private int attr;

public void setAttr(int attr) {

this.attr = attr;

}

}

2).在WEB-INF目錄下編寫一個tld檔案,描述自定義SimpleTag類;

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">

1.0

MyTag

http://www.xxx.com/MyTag

myTag 标簽名

com.xx.MyTag 标簽處理類

scriptless/empty

scriptless不能含Java腳本代碼

empty代表隻能為空

tagdependent不會輸出到浏覽器

JSP代表任意内容,不能在簡單标簽使用,隻能在傳統标簽使用

聲明屬性

attr 屬性名

true 是否為必須存在

true 是否支援EL表達式

int 屬性java類型

3).在jsp頁面中引入tld檔案,使用自定義标簽

循環輸出文本