tld自定义标签
tld自定義標(biāo)簽
1.簡(jiǎn)介
? tld(taglib description)是自定義標(biāo)簽,自定義標(biāo)簽一般用于jsp頁(yè)面。使用tld可以在JSP頁(yè)面中使用自己定義的標(biāo)簽。這樣你就可以在JSP頁(yè)面用,除了使用JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)(JSTL)外,還可以使用自己自定義的標(biāo)簽庫(kù)。看看別是怎么說(shuō)的:
自定義標(biāo)簽是用戶定義的JSP語(yǔ)言元素。當(dāng)JSP頁(yè)面包含一個(gè)自定義標(biāo)簽時(shí)將被轉(zhuǎn)化為servlet,標(biāo)簽轉(zhuǎn)化為對(duì)被 稱為tag handler的對(duì)象的操作,即當(dāng)servlet執(zhí)行時(shí)Web container調(diào)用那些操作。
JSP標(biāo)簽擴(kuò)展可以讓你創(chuàng)建新的標(biāo)簽并且可以直接插入到一個(gè)JSP頁(yè)面。 JSP 2.0規(guī)范中引入Simple Tag Handlers來(lái)編寫這些自定義標(biāo)記。
你可以繼承SimpleTagSupport類并重寫的doTag()方法來(lái)開發(fā)一個(gè)最簡(jiǎn)單的自定義標(biāo)簽。
來(lái)自:菜鳥編程(https://www.runoob.com/jsp/jsp-custom-tags.html)
2.了解標(biāo)簽結(jié)構(gòu)
標(biāo)簽有一下結(jié)構(gòu):標(biāo)簽體,標(biāo)簽名,標(biāo)簽屬性
<MyTag></MyTag> <MyTag>MyTag body</MyTag> <MyTag 標(biāo)簽屬性="xxx"/>3.編寫自定義標(biāo)簽
編寫自定義標(biāo)簽分三步走:
- 編寫標(biāo)簽處理類
- 編寫標(biāo)簽描述符
- 導(dǎo)入并使用自定義標(biāo)簽
3.1編寫標(biāo)簽處理類
要自定義標(biāo)簽就需要,編寫標(biāo)簽的處理類,處理類決定了標(biāo)簽的功能。自定義標(biāo)簽先繼承SimpleTagSupport類,并重寫其中的doTag()方法。doTag()方法用于編寫標(biāo)簽的執(zhí)行體,其方法的定義來(lái)自于 interface SimpleTag。
SimpleTagSupport主要有以下方法:
- public void doTag() 標(biāo)簽方法體
- public void setParent(JspTag parent) 標(biāo)簽鑲嵌是會(huì)調(diào)用的方法,就是給標(biāo)簽設(shè)置父標(biāo)簽(一般不重寫)
- public JspTag getParent() 獲取父標(biāo)簽
- public void setJspContext(JspContext pc) 存儲(chǔ)提供的JSP上下文jspContext對(duì)象
- protected JspContext getJspContext() 獲取JspContext
- public void setJspBody(JspFragment jspBody) 設(shè)置標(biāo)簽
- protected JspFragment getJspBody() 獲取標(biāo)簽
我們只需要重點(diǎn)關(guān)注doTag(),getJspBody(),和getJspContext() 方法。
例子一:只針對(duì)標(biāo)簽的功能
public class HelloTag extends SimpleTagSupport {//重寫doTag()方法,doTag()方法用于編寫標(biāo)簽的執(zhí)行體public void doTag() throws JspException, IOException {//使用了getJspContext()方法來(lái)獲取當(dāng)前的JspContext對(duì)象JspWriter out = getJspContext().getOut();//打印out.println("Hello Custom Tag!");} }例子二:將標(biāo)簽體打印到JSP頁(yè)面中(這里用到了標(biāo)簽體)
注釋:invoke方法可以控制是否執(zhí)行和輸出標(biāo)簽體的內(nèi)容、是否迭代執(zhí)行標(biāo)簽體的內(nèi)容或?qū)?biāo)簽體的執(zhí)行結(jié)果進(jìn)行修改后再輸出。可以使用invoke方法多次執(zhí)行和輸出標(biāo)簽體的內(nèi)容。
public class HelloTag extends SimpleTagSupport {StringWriter sw = new StringWriter();public void doTag() throws JspException, IOException{//獲取標(biāo)簽體,如(<sd>我是標(biāo)簽體</sd>)getJspBody().invoke(sw);//getJspContext()方法來(lái)獲取當(dāng)前的JspContext對(duì)象,并打印標(biāo)簽體到頁(yè)面中getJspContext().getOut().println(sw.toString());} }例子三:從屬性和標(biāo)簽體中獲取信息
public class HelloTag extends SimpleTagSupport {private String message;//自定義的標(biāo)簽屬性必須提供set方法,將通過(guò)set方法傳值public void setMessage(String msg) {this.message = msg;}StringWriter sw = new StringWriter();public void doTag() throws JspException, IOException{if (message != null) {/* 從屬性中使用消息 */JspWriter out = getJspContext().getOut();out.println( "標(biāo)簽屬性是:"+ message);}else {/* 從內(nèi)容體中使用消息 */getJspBody().invoke(sw);getJspContext().getOut().println("標(biāo)簽體是:"+sw.toString());}}}3.2 編寫標(biāo)簽描述符
編寫好標(biāo)簽處理類我們就可以開始制作標(biāo)簽啦,先在WEB-INF/目錄下創(chuàng)建mytag.tld文件。
<?xml version="1.0" encoding="UTF-8" ?> <taglib><!--標(biāo)簽庫(kù)的描述信息--><tlib-version>1.0</tlib-version><jsp-version>2.0</jsp-version><short-name>Example TLD</short-name><!--自定義的標(biāo)簽--><tag><!--標(biāo)簽名--><name>Hello</name><!--對(duì)應(yīng)的處理類--><tag-class>com.runoob.HelloTag</tag-class><!--處理類中定義的變量,因?yàn)闆]有所以empty--><body-content>empty</body-content></tag><!--如果有自定義標(biāo)簽屬性的,要添加attribute<tag> <name>Hello</name><tag-class>com.runoob.HelloTag</tag-class<body-content>scriptless</body-content><attribute><name>message</name></attribute></tag> --> </taglib>3.3導(dǎo)入并使用自定義標(biāo)簽
最后一部就是導(dǎo)入標(biāo)簽庫(kù)了,這個(gè)十分簡(jiǎn)單只需要使用 <%@ taglib prefix=“ex” uri=“WEB-INF/custom.tld”%> 導(dǎo)入即可。
<!--prefix引用前綴,uri指定引用的標(biāo)簽庫(kù)--> <%@ taglib prefix="ex" uri="WEB-INF/mytag.tld"%> <html><head><title>A sample tag</title></head><body><ex:Hello/><!--根據(jù)實(shí)際的需要,可以利用標(biāo)簽體和標(biāo)簽屬性能豐富標(biāo)簽的功能--></body> </html>總結(jié)
- 上一篇: 教你几招如何解决显示器不能全屏显示问题如
- 下一篇: 包转发率是什么