亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSPServletJSF標簽庫的深入研究

2024-09-05 00:17:05
字體:
來源:轉載
供稿:網友

標簽庫Taglib

標簽被定義和分布在一個稱為標簽庫的結構中,一個標簽庫是由元信息和類組成的集合:

1.標簽處理器:實現定制標簽功能的Java類。

2.標簽附加信息(TEI):向JSP容器提供邊輯以確認標簽屬性和創建變量的類。

3.標簽庫描述器(TLD):描述單個標簽和整個標簽庫屬性的XML文檔。

標簽處理器和標簽附加信息需要定位在JSP容器類載入器可以找到的地方。標簽庫描述器可在URL指定的符意位置。JSP1.1規范要求JSP容器接受一個打包成因定結構的JAR文件的標簽庫。TLD必須是/META-INF目錄中名為taglib.tld的文件,JAR文件則復制到/WEB-INF/lib目錄下。

一、標簽實現

1.開發步驟

a.定義標簽的名字、屬性、聲明的變量和標簽體的內容。

b.編寫標簽庫描述器TLD。

c.編寫標簽處理器。

d.在JSP頁面中使用標簽。

2.JSP頁面在JSP容器中的轉換步驟:

JSP頁面存在三種形式:jsp文件、java文件和class文件。

a.指令元素、和向JSP容器提供轉換時信息。

b.HTML行在_jspService()方法中依順序轉換到out.print()語名中。

c.腳本元素的聲明被原封不動地復制到_jspService()方法外的源碼中。

d.腳本元素的表達式在_jspService()方法中依順序轉換到out.print()語名中。

e.腳本元素的scriptlet被原封不動地復制到_jspService()方法中。

f.行為元素被轉換為執行其功能的運行時邏輯代碼。

g.定制標簽被擴展到調用其相應標簽處理器中方法的Java語句中。

3.標簽在JSP容器中的轉換步驟:

a.JSP容器使用taglib指令元素定位標簽庫描述器,將頁面中用到的定制標簽和TLD相匹配。

b.讀取標簽庫描述器的標簽列表和每一標簽相關的類名字。

c.在頁面中遇到一個標簽時,查找與具有指定名字的標簽前綴相關的一個標簽庫。

d.容器使用在TLD中找到的標簽結構信息生成一系列完成標簽功能的Java語句。

二、標簽庫描述器(TLD)

標簽庫描述器是一個描述整個標簽庫標記信息和庫中每個標簽處理器及其屬性的XML文檔。

標簽庫描述器的DTD由一個簡單的元素組成,此元素包含下列一些子元素。

整個標簽庫標記信息

tlibversion標簽庫版本號。是一個點式十進制數,最多為4組小數點分隔的數字組成。

jspversion標簽庫所需的JSP規范最低版本。例如JSP1.1

shortname標簽庫的縮寫名。JSP可以使用該名字作為庫中標簽的缺省前綴。

uri標簽庫唯一URI的元素。典型URL位置來自可下載taglib的位置。

info標簽庫描述信息。

每個標簽處理器及其屬性

tag在TLD中加入標簽,描述組成庫的每個標簽。

name與標簽庫的名字前綴一起使用的標簽的名字,是JSP容器唯一的標簽標識。

tagclass實現標簽的標簽處理器類的全名。

teiclass標簽附加信息(TEI)類的全名。TEI類給出關于標簽處理器創建變量及對標簽司性執行的任意有效性驗證的信息。

bodycontent描述標簽處理器如何使用標簽體的內容。有三種取值:

empty:表示標簽體必須為空;

JSP:表示腳本元素和模板及其它標簽一樣被評估。

tagdependent:體內容被原封不動寫入BodyContent,其它腳本元素以源碼形式出現,而不被JSP容器解釋。

info標簽的人工可讀描述性信息。

attribute使用標簽時被編碼的屬性信息。用于定義標簽的屬性。

屬性名:屬性的名字。

true|false:屬性在標簽用到的位置是否要被編碼。

true|false:屬性值能否用表達式指定。

三、標簽處理器

標簽處理器是通過實現JSP容器調用的一系列預定義方法執行定制標簽行為的一個Java類。

標簽處理器實現了標簽的行為,標簽處理器是Java類。

1.標簽處理器的工作方式

a.導入javax.servlet.jsp和javax.servlet.jsp.tagext包。

b.實現javax.servlet.jsp.tagext包中的Tag接口或BodyTag接口。BodyTag是Tag的子接口。

c.繼承TagSupport類或BodyTagSuppoert類。它們是上述接口的缺省實現。

d.重載publicintdoStartTag()throwsJspException方法。

2.標簽處理器的接口與實現

javax.servlet.jsp.tagext.Tag是實現標簽的最基本的接口。

javax.servlet.jsp.tagext.TagSupport是實現Tag接口的具體類。

通常情況下繼承tagSupport類而不直接實現Tag接口通常是有益的。除了對所有必需方法提供了缺省實現外、還保存了pageContext對象及對嵌套標簽的支持。

Tag接口包含4個常量,表示doStartTag()和doEndTag()方法可能的返回碼。

EVAL_BODY_INCLUDE當doStartTag()返回時,指明servlet應對標簽體進行評估。

SKIP_BODY當doStartTag()返回時,指明servlet應忽視標簽體。

EVAL_PAGE當doEndTag()返回時,指明頁面其余部分應被評估。

SKIP_PAGE當doEndTag()返回時,指明頁面其余部分就被跳過。

Tag接口的方法

publicvoidsetPageContext(PageContextctx)生成的servlet在請求處理器執行其它任務前首先調用此方法,實現類應保存上下文對象以便它可以在標簽生命期中使用。從頁面上下文中標簽處理器可以訪問所有JSP隱含對象。

publicvoidsetParent(Tagp)使用一個標答可以找到操作棧中它上面的標簽。在setPageContext后立即調用。

publicTaggetParent()返回父標簽。

publicintdoStartTag()throwsJsp在設置了頁面上下文、父標簽和開始標記中編碼的屬性后調用。返回碼表明JSP實現servlet是否就評估標簽體。

publicintdoEndTag()throwsJspException當遇到結否標記時調用。返回碼表明JSP是否就繼紐頁面的其余部份。

publicvoidrelease()確保在頁面退出前被調用。釋放資源并重置標簽處理器狀態。

TagSupport類的方法

publicstaticTagfinAncestorWithClass(TagthisTag,Classcls)為所需的父標簽處理器查找運行時標簽棧。一個標簽處理器可以提供其范圍內子標簽調用的方法。

publicvoidsetId(Stringid)保存和檢索在id屬性中指定的名字。

publicvoidsetValue(Stringname,Objecto)在本地哈希表中設置指定名字的值。

publicObjectgetValue(Stringname)從本地哈希表中獲取指定名稱的值。

publicvoidremoveValue(Stringname)從本地哈希表中刪除指定名稱的值。

publicEnumerationgetValues()返回哈希表中關鍵字的一個枚舉。

3.標簽處理器的生命期

a.生成servlet需要創建標簽處理器類的一個實例。實現方式通常是調用JSP容器的工廠類的一個方法,工廠類包含一個標簽處理器實例池以使其可重用不再處于激活狀態的對象。

b.初始化標簽處理器,使servlet獲知其存在性。servlet通過調用標簽處理器的兩個方法實現此過程:setPageContext(PageContextctx)和setParent(Tagparent)。

c.如果標簽具有屬性,屬性的取值通過處理器提供setter方法傳入到對象。屬性setter方法是一個標簽支持屬性所需的唯一方法。

d.頁面的上下文和父標簽已被調置,并已具備屬性。此時調用標簽處理器的doStartTag()方法,該方法可以讀取這些變量并執行實現標答功能所需的計算和操作。doStartTag()方法必須返回一個整型數。返回EVAL_BODY_INCLUDE則正常處理標簽體,返回SKIP_BODY則從初始JSP頁面中直到此標簽結束標記處的內容均被忽略。

e.標簽體被評估或忽視后調用標簽處理器的doEndTag()方法,返回EVAL_PAGE則頁面的其余部分被評估,返回SKIP_PAGE則servlet代碼立即從_jspService()中返回。

4.體標簽處理器的接口與實現

javax.servlet.jsp.tagext.BodyTag是Tag的子接口。

javax.servlet.jsp.tagext.BodyTagSupport是實現BodyTag類。

BodyContent是javax.servlet.jsp.JspWriter的子類,但與其父類有所區別。

BodyContent對象的內容不自動寫了入servlet的輸出流,而是積累在一字符串緩存中。當標簽體完成后其對象仍可在doEndTag()方法中可以應用,由getString()或getReader()方法操作。并在必要時修改及寫入恢復的JspWriter輸出流。

BodyContent類的方法

publicvoidflush()throwsIOException復寫JspWrite.flush()方法以便它總是產生溢出。刷新寫入已失效,因為它沒有連接到將被寫入的實際輸出流中。

publicvoidclearBody()重置BodyContent緩存為空。

publicReadergetReader()返回Reader讀取體內容。

publicStringgetString()返回包含體內容的一個字符串。

publicvoidwriteOut(Writew)將體內容寫入指定輸出。

publicJspWritegetEnclosingWrite()返回棧中下一個更高的寫入者對象(可能是另一個BodyContent對象)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久99热这里只有精品国产| 中文字幕国产亚洲2019| 亚洲综合精品伊人久久| 国产欧美一区二区三区四区| 国产成人a亚洲精品| 欧美在线一区二区视频| 萌白酱国产一区二区| 欧美日韩综合视频网址| 日韩av一区二区在线| 欧美性生活大片免费观看网址| 久久久免费观看视频| 日韩最新av在线| 久久久精品久久久久| 久久精品视频亚洲| 精品亚洲aⅴ在线观看| 亚洲国产成人在线播放| 国产精品1区2区在线观看| 日韩在线观看免费高清完整版| 成人免费在线网址| 日韩精品在线免费| 国产a∨精品一区二区三区不卡| 国产中文字幕日韩| 国产情人节一区| 97国产suv精品一区二区62| 亚洲免费视频在线观看| 亚洲va男人天堂| 欧美日韩黄色大片| 亚洲影院色在线观看免费| 麻豆乱码国产一区二区三区| 欧美电影免费看| 色天天综合狠狠色| 欧美激情国产日韩精品一区18| 成人久久一区二区| 在线日韩日本国产亚洲| 国产小视频国产精品| 亚洲三级黄色在线观看| 在线观看免费高清视频97| 欧美一级淫片丝袜脚交| 久久综合九色九九| 欧美黄色www| 欧美激情免费观看| 国产精品6699| 欧美成人午夜剧场免费观看| 精品国产一区久久久| 69国产精品成人在线播放| 亚洲乱码一区av黑人高潮| 亚洲精品午夜精品| 国产成人欧美在线观看| 日韩欧美亚洲成人| 黑人巨大精品欧美一区免费视频| 69**夜色精品国产69乱| 久久精品国产精品亚洲| 亚洲欧美中文字幕在线一区| 国产精自产拍久久久久久| 国产精品扒开腿做爽爽爽视频| 亚洲免费视频在线观看| 亚洲高清一二三区| 久久影视三级福利片| 成人黄色在线播放| 成人在线精品视频| 国产91成人在在线播放| 亚洲精品xxxx| 欧美日韩成人在线观看| 日韩精品极品视频| 91久久国产综合久久91精品网站| 91精品视频播放| 欧美性猛交xxxx富婆| 欧美一级视频一区二区| 国产精品成人va在线观看| 91精品国产乱码久久久久久蜜臀| 成人美女av在线直播| 亚洲视频欧美视频| 欧美激情亚洲精品| 色综合久久中文字幕综合网小说| 91av在线免费观看| 国产精品9999| 一本色道久久综合亚洲精品小说| 国产欧美va欧美va香蕉在| 色樱桃影院亚洲精品影院| 欧美做受高潮电影o| 欧美多人乱p欧美4p久久| 亚洲三级免费看| 欧美成人国产va精品日本一级| 97香蕉超级碰碰久久免费的优势| 搡老女人一区二区三区视频tv| 欧美一级淫片丝袜脚交| 亚洲综合在线小说| 久久久久一本一区二区青青蜜月| 欧美亚洲视频在线观看| 亚洲第一区中文字幕| 精品久久久久久久久久久久久| www.日韩av.com| 久久躁日日躁aaaaxxxx| 欧美成人h版在线观看| 亚洲天堂一区二区三区| 国产一区二区三区在线看| 成人情趣片在线观看免费| 成人观看高清在线观看免费| 中文字幕日韩综合av| 欧美色另类天堂2015| 国产成人亚洲综合91| 精品久久久久久久大神国产| 成人xvideos免费视频| 性色av一区二区三区免费| 国产综合香蕉五月婷在线| 97视频在线播放| 国产一区二区三区精品久久久| 精品国产91久久久久久老师| xvideos成人免费中文版| 亚洲福利视频在线| 日韩欧美亚洲范冰冰与中字| 国产精品亚洲激情| 精品在线观看国产| 久久国产精品久久久久久| 亚洲肉体裸体xxxx137| 国产精品美女在线| 97视频在线观看免费高清完整版在线观看| 亚洲一区二区三区香蕉| 91在线免费观看网站| 神马国产精品影院av| 国产精品视频99| 欧美午夜丰满在线18影院| 97av在线视频| 欧美国产视频日韩| 欧美日韩亚洲网| 亚洲免费精彩视频| 精品国产拍在线观看| 亚洲最大的网站| 2019精品视频| 在线播放亚洲激情| 久久久久久久久久久成人| 岛国视频午夜一区免费在线观看| 久久久久久网址| 亚洲欧美中文另类| 国产视频精品免费播放| 久久91亚洲精品中文字幕| 亚洲欧洲高清在线| 精品福利一区二区| 欧美尺度大的性做爰视频| 亚洲国产美女精品久久久久∴| 亚洲男人的天堂在线播放| 亚洲综合中文字幕在线| 精品国产老师黑色丝袜高跟鞋| 中文字幕av一区二区三区谷原希美| 国产成人av网| 国产欧美精品在线播放| 日韩av免费在线看| 亚洲一区二区福利| 亚洲国模精品私拍| 色婷婷亚洲mv天堂mv在影片| 国产精品白丝jk喷水视频一区| 亚洲欧洲黄色网| 亚洲欧美日韩在线高清直播| 91免费欧美精品| 久久中文字幕国产| 蜜臀久久99精品久久久久久宅男| 中文字幕免费国产精品| 久久成人精品一区二区三区| 日本欧美在线视频| 中日韩美女免费视频网址在线观看| 国产视频久久久| 欧美一级视频免费在线观看| 欧美一区二区三区精品电影| 日本一区二区在线播放|