簡(jiǎn)要說明:
1 如何輸出到j(luò)sp頁面:調(diào)用JspWriter JspWriter out = pageContext.getOut();out.print......記住這個(gè)方法就可以了。
2 輸出后如何作處理,函數(shù)會(huì)返回幾個(gè)值之一。EVAL_PAGE 表示tag已處理完畢,返回jsp頁面。還有幾個(gè)值,例如 EVAL_BODY_AGAIN 和EVAL_BODY_INCLUDE等 跟流程控制有關(guān).
編寫tld
tld代碼
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>test</short-name>
<!--OutputTag-->
<tag>
<name>out</name>
<tag-class>test.OutputTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
在WEB-INF下新建tlds文件夾,把這個(gè)文件取名為test.tld,放到tlds文件夾下。引用時(shí)的路徑應(yīng)該這樣:WEB-INF\tlds\test.tld
關(guān)于tld的簡(jiǎn)單說明:
short-name:taglib的名稱,也稱為前綴。比如“c:out value=""/” 里的“c”
name:tag的名字。例如“c:out value=""/” 里的"out”,我們的類也取名為out,由于有前綴作區(qū)分,不會(huì)同其他庫的同名tag組件混淆
tag-class:完整的tag組件路徑,記著帶包名
body-content:指tag之間的內(nèi)容。例如c:out value="" ...... /c 起始和關(guān)閉標(biāo)簽之間就是body-content。由于沒有處理body-content ,所以上面設(shè)為empty,如果是嵌套標(biāo)簽,或則是要在服務(wù)器端處理標(biāo)簽體的話,就是jsp了
“attribute”里的name:屬性名字。例如c:out value=""/里的value。名字可任意取,只要類里提供相應(yīng)的set方法即可。
required:是否必填屬性。
rtexprvalue:是否支持運(yùn)行時(shí)表達(dá)式取值就是是否可以<%=%>或則是${}方式傳值。
這是tag的強(qiáng)大功能。
編寫jsp頁面
<%@ page language="java"%>
<%@ taglib uri="/WEB-INF/tlds/test.tld" prefix="test"%>
<html>
<body>
Test Tag: <test:out name="TEST"/>
</body>
</html>
啟動(dòng)服務(wù)器,如果一切按照上面步驟的話,就能看到 Test Tag: Hello! TEST 字樣。最簡(jiǎn)單的tag就這么出來了。并不難,是不是?
------------------------------------------------------------------
Tag系列的Interface里定義的靜態(tài)int,通過他們也能一窺tag組鍵的執(zhí)行流程,這幾個(gè)靜態(tài)值分別是:
SKIP_BODY : 跳過了開始和結(jié)束標(biāo)簽之間的代碼,一般是在doStartTag中使用
EVAL_BODY_INCLUDE :處理嵌套的標(biāo)簽,一般是在doStartTag中使用,由負(fù)責(zé)處理標(biāo)簽正文的tag接口提供
EVAL_BODY_BUFFERED :對(duì)包含的內(nèi)容進(jìn)行解析一般是在doStartTag中使用,由負(fù)責(zé)處理標(biāo)簽正文的bodyTag接口提供,目的是通知jsp容器作好讀取正文的工作(創(chuàng)建一個(gè)body- content包裝正文和獲取存放操作結(jié)果的out對(duì)象,便于以后的操作和輸出).
EVAL_BODY_AGAIN:處理標(biāo)簽正文,嵌套標(biāo)簽的iteratorTag接口的使用
SKIP_PAGE : 忽略剩下的頁面,一般是在doEndTag中使用
EVAL_PAGE : 繼續(xù)執(zhí)行下面的頁, 一般是在doEndTag中使用。
相關(guān)推薦:計(jì)算機(jī)二級(jí)JAVA備考:JAVA獲得域名的IP地址北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |