日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tld自定义标签

發(fā)布時間:2024/9/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tld自定义标签 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

tld自定義標(biāo)簽

1.簡介

? tld(taglib description)是自定義標(biāo)簽,自定義標(biāo)簽一般用于jsp頁面。使用tld可以在JSP頁面中使用自己定義的標(biāo)簽。這樣你就可以在JSP頁面用,除了使用JSP標(biāo)準(zhǔn)標(biāo)簽庫(JSTL)外,還可以使用自己自定義的標(biāo)簽庫。看看別是怎么說的:

自定義標(biāo)簽是用戶定義的JSP語言元素。當(dāng)JSP頁面包含一個自定義標(biāo)簽時將被轉(zhuǎn)化為servlet,標(biāo)簽轉(zhuǎn)化為對被 稱為tag handler的對象的操作,即當(dāng)servlet執(zhí)行時Web container調(diào)用那些操作。

JSP標(biāo)簽擴(kuò)展可以讓你創(chuàng)建新的標(biāo)簽并且可以直接插入到一個JSP頁面。 JSP 2.0規(guī)范中引入Simple Tag Handlers來編寫這些自定義標(biāo)記。

你可以繼承SimpleTagSupport類并重寫的doTag()方法來開發(fā)一個最簡單的自定義標(biāo)簽。

來自:菜鳥編程(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í)行體,其方法的定義來自于 interface SimpleTag。

SimpleTagSupport主要有以下方法:

  • public void doTag() 標(biāo)簽方法體
  • public void setParent(JspTag parent) 標(biāo)簽鑲嵌是會調(diào)用的方法,就是給標(biāo)簽設(shè)置父標(biāo)簽(一般不重寫)
  • public JspTag getParent() 獲取父標(biāo)簽
  • public void setJspContext(JspContext pc) 存儲提供的JSP上下文jspContext對象
  • protected JspContext getJspContext() 獲取JspContext
  • public void setJspBody(JspFragment jspBody) 設(shè)置標(biāo)簽
  • protected JspFragment getJspBody() 獲取標(biāo)簽

我們只需要重點(diǎn)關(guān)注doTag(),getJspBody(),和getJspContext() 方法。

例子一:只針對標(biāo)簽的功能

public class HelloTag extends SimpleTagSupport {//重寫doTag()方法,doTag()方法用于編寫標(biāo)簽的執(zhí)行體public void doTag() throws JspException, IOException {//使用了getJspContext()方法來獲取當(dāng)前的JspContext對象JspWriter out = getJspContext().getOut();//打印out.println("Hello Custom Tag!");} }

例子二:將標(biāo)簽體打印到JSP頁面中(這里用到了標(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()方法來獲取當(dāng)前的JspContext對象,并打印標(biāo)簽體到頁面中getJspContext().getOut().println(sw.toString());} }

例子三:從屬性和標(biāo)簽體中獲取信息

public class HelloTag extends SimpleTagSupport {private String message;//自定義的標(biāo)簽屬性必須提供set方法,將通過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)簽庫的描述信息--><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><!--對應(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)簽庫了,這個十分簡單只需要使用 <%@ taglib prefix=“ex” uri=“WEB-INF/custom.tld”%> 導(dǎo)入即可。

<!--prefix引用前綴,uri指定引用的標(biāo)簽庫--> <%@ 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é)

以上是生活随笔為你收集整理的tld自定义标签的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。