




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、自定義標簽IT資訊交流網(wǎng) 什么是自定義標簽自定義標簽是指JSP自定義標簽。自定義標簽在功能上邏輯上與javaBean 類似,都封裝Java 代碼。自定義標簽是可重用的組件代碼,并且允許開發(fā)人員為復雜的操作提供邏輯名稱。自定義標簽是在JSP1.1規(guī)范里最早提出的 從標簽的來源上看,JSP中的標簽庫可以分為兩種類型:一種是JSP標準標簽庫(JSP Standard Tag Library,JSTL),它是JSP開發(fā)環(huán)境供應(yīng)商開發(fā)的;另一種是JSP開發(fā)環(huán)境的使用者(即用戶)自己定義的標簽。通過使用標簽庫,可以簡化JSP和Web應(yīng)用程序的開發(fā),減少JSP中的腳本代碼量,大大降低JSP頁面的復雜度,并且
2、使代碼最大程度地重用IT資訊交流網(wǎng) 標簽庫的接口和類的繼承關(guān)系標簽庫 API 定義在 javax.servlet.jsp.tagext 包中IT資訊交流網(wǎng) 標簽庫的接口和類的繼承關(guān)系 開發(fā)自定義標簽,其核心就是要編寫處理器類,一個標簽對應(yīng)一個標簽 處理器類,而一個標簽庫則是很多標簽處理器的集合。JSP所有的標簽 處理器類都實javax.servlet.jsp.tagext.JspTag接口。這個接口是一個標記接口,它有兩個直接子接口:簡單標簽:標簽處理類實現(xiàn)SimpleTag接口,它是JSP2.0新增加的接口,代表簡單的標簽;經(jīng)典標簽:jsp2.0以前標簽處理類實現(xiàn)Tag接口,它是經(jīng)典的、必須
3、實現(xiàn)的接口,它有一個直接子接口IterationTag。IT資訊交流網(wǎng) 自定義標簽的分類分類 說明 范例 正常標簽(Standard Tag)包含起始標簽、標簽體、結(jié)束標簽 Select * from emp空標簽(Empty Tag)沒有標簽體,但可包含標簽的屬性ATMjsp:ATM/嵌套標簽(Nested Tag)自定義標簽內(nèi)包含其他自定義標簽 IT資訊交流網(wǎng) 開發(fā)自定義標簽的步驟根據(jù)業(yè)務(wù)要求確定標簽形式編寫標簽處理器類(Tag Handler Class)編寫標簽的描述文件tld(Tag Library Desscriptor File)web.xml文件(在其中指定tld的位置)(在s
4、ervlet2.4,jsp2.0以上的版本 不用配置此項)JSP頁面導入和使用標簽IT資訊交流網(wǎng) 自定義標簽的執(zhí)行流程瀏覽器JSP引擎(碰到JSP文件中的標簽指令)TLD文件標簽處理類請求應(yīng)答查找調(diào)用處理結(jié)果IT資訊交流網(wǎng) SimpleTag接口優(yōu)點 JSP 2.0中加入了新的創(chuàng)建自制標記的API javax.servlet.jsp.tagext.SimpleTag,該 API定義了用來實現(xiàn)簡單標記的接口。 1、和JSP 1.2中的已有接口不同的是,SimpleTag接口 不使用doStartTag()和doEndTag()方法,而提供了一個簡單的doTag()方法。這個方法在調(diào)用該標記時只被
5、使用一次。而需要在一個自制標記中實現(xiàn)的所有邏輯過程、循環(huán)和對標記體的評估等都在這個方法中實現(xiàn)。從這個方面來講,SimpleTag可以和IterationTag達到同等的作用。但SimpleTag的方法和處理周期要簡單得多。 2、在SimpleTag中還有用來設(shè)置JSP內(nèi)容的setJspBody()和getJspBody()方法。Web容器會使用setJspBody()方法定義一個代表JSP內(nèi)容的JspFragment對象。實現(xiàn)SimpleTag標記的程序可以在doTag方法中根據(jù)需要多次調(diào)用getJspBody().invoke()方法以處理JSP內(nèi)容。 3、對于前臺WEB頁面制作人員:在JS
6、P1.2時代,Taglib頁面調(diào)用實際上是比較復雜的,SimpleTag+EL表達式語言極大的簡化了Taglib調(diào)用,真正達到不懂JAVA的人員也可以輕松編寫 JSP頁面的目的。IT資訊交流網(wǎng) SimpleTag 接口setJspContext 方法:該方法把代表 JSP 頁面的 pageContext 對象傳遞給標簽處理器對象。setParent 方法:該方法把父標簽處理器對象傳遞給當前標簽處理器對象getParent 方法:該方法用于獲得標簽的父標簽處理器對象setJspBody 方法:該方法用于把代表標簽體的 JspFragment 對象傳遞給標簽處理器對象doTag 方法:該方法用于完
7、成所有的標簽邏輯。該方法可以拋出 javax.servlet.jsp.SkipPageException 異常,用于通知 web 容器不再執(zhí)行 JSP 頁面中位于結(jié)束標記后面的內(nèi)容。IT資訊交流網(wǎng) 實現(xiàn) SimpleTag 接口的標簽處理器類的生命周期setJspContextsetParentsetXXXsetJspBodydoTag1.Jsp 引擎將代表 JSP 頁面的 pageContext 對象傳遞給標簽處理器對象2.Jsp 引擎將父標簽處理器 對象傳遞給當前標簽處理 器對象。只有存在父標簽 時,jsp 引擎才會調(diào)用該 方法3.設(shè)置標簽屬性。只有定義 屬性才調(diào)用該方法4. 若存在標簽體
8、, JSP 引擎將把標簽體封裝成一個 JspFragment 對象,調(diào)用 setJsddpBody 方法將 JspFragment 對象傳遞給標簽處理器對象。若標簽體為空,這 setJspBody 將不會被 JSP 引擎調(diào)用5.容器調(diào)用標簽處理器對象的 doTag 方法執(zhí)行標簽邏輯IT資訊交流網(wǎng) JspFragment 類該類的實例對象代表 JSP 頁面中的一段符合 JSP 語法規(guī)范的 JSP 片段,這段 JSP 片段不能包含 JSP 腳本元素()JSP 引擎在處理簡單標簽的標簽體時,會把標簽體內(nèi)容用一個 JspFragment 對象表示,并調(diào)用標簽處理器對象的 setJspBody 方法把
9、JspFragment 對象傳遞給標簽處理器對象。得到代表標簽體的 JspFragment 對象后,標簽開發(fā)者就可以在標簽處理器中根據(jù)需要調(diào)用 JspFragment 對象的方法,進而決定如何處理標簽體。IT資訊交流網(wǎng) JspFragment 類getJspContext 方法:該方法用于返回代表調(diào)用頁面的 JspContext 對象Invoke 方法(java.io.Writer out):該方法用于執(zhí)行 JspFragment 對象所代表的 JSP 代碼片段。在 doTag() 方法中可以根據(jù)需要調(diào)用該方法。該方法的參數(shù) out 用于指定將 JspFragment 對象的執(zhí)行結(jié)果寫入到哪個
10、輸出流對象中。若傳遞參數(shù) out 的值為 null,則將執(zhí)行結(jié)果寫入到 JspContext.geOut() 方法返回的輸出流對象中。若想在標簽處理器中修改標簽體內(nèi)容:需在調(diào)用 invoke 方法時指定一個可取出結(jié)果數(shù)據(jù)的輸出流對象(如:StringWriter),讓標簽體的執(zhí)行結(jié)果輸出到該輸出流中,然后從該輸出流對象中取出數(shù)據(jù)進行修改后再輸出到目標設(shè)備IT資訊交流網(wǎng) SimpleTagSupport為簡化簡單標簽處理器的編寫工作,JSP API 中提供了 SimpleTag接口的一個實現(xiàn)類SimpleTagSupport。 SimpleTagSupport實現(xiàn)了SimpleTag接口中的方法
11、,它 內(nèi)部以成員變量的形式保存了setJspContext方法和setJspBody方法傳遞進來的參數(shù)。此外,它還定義了如 下兩個方法、來返回這兩個參數(shù):getJspContext方法:該方法用于返回代表調(diào)用頁面的JspContext對象getJspBody方法:該方法用于得到代表標簽體的JspFragment對象,IT資訊交流網(wǎng) 標簽庫描述文件標簽庫描述(Tag Library Description)文件簡稱為 tld 文件,其擴展名為 .tld多個標簽的集合就形成了一個標簽庫,標簽庫中的所有標簽都必須在標簽文件中進行描述Tld 文件可以放置在 web 應(yīng)用程序的 WEB-INF 目錄及其
12、子目錄中,但不能放置在 WEB-INF 目錄下的 classes 和 lib 子目錄中 。tld 文件也可以放置在 WEB-INFlib 目錄下的 jar 包的 META-INF 目錄及其子目錄中服務(wù)器啟動時查找的順序:IT資訊交流網(wǎng) 標簽庫描述文件:指定標簽體的類型??赡苋≈涤?3 種:empty:沒有標簽體scriptless:標簽體可以包含 el 表達式和 JSP 動作元素,但不能包含 JSP 的腳本元素tagdependent:表示標簽體交由標簽本身去解析處理。若指定 tagdependent,在標簽體中的所有代碼都會原封不動的交給標簽處理器,而不是將執(zhí)行結(jié)果傳遞給標簽處理器IT資訊交
13、流網(wǎng) 在 JSP 頁面引用自定義標簽在 JSP 頁面使用 taglib 指令引入標簽庫描述文件: uri:屬性用于指定所引入的標簽庫描述(tld)文件中所定義的 元素的內(nèi)容;prefix 屬性用于為引入的 tld 文件指定一個”引用代號”。Prefix 屬性可以由 jsp 文件的作者任意指定,只要與其他 taglib 指令的 prefix 屬性值不同就可以。IT資訊交流網(wǎng) 自定義標簽1定制一個標簽, 輸出當前的日期IT資訊交流網(wǎng) 自定義標簽例子2定制一個帶有兩個屬性的標簽, 用于計算并輸出兩個數(shù)的最大值IT資訊交流網(wǎng) 自定義標簽例子itcast 0.1 core libraryitcast c
14、ore0.1itcastIT資訊交流網(wǎng) 自定義標簽例子 maxValue com.itcast.mytag.MaxValueTag empty num1 true true IT資訊交流網(wǎng) 自定義標簽例子3定制一個帶有三個屬性的標簽, 用于按指定的步長輸出值 IT資訊交流網(wǎng) 自定義標簽例子4定制一個帶有一個屬性的標簽, 用于輸出指定文件的內(nèi)容 IT資訊交流網(wǎng) 自定義標簽例子5定制一個帶含有標簽體的標簽,并把標簽體的內(nèi)容全部輸出轉(zhuǎn)化為大寫 asdfdsfsdfghhhhhhhhhhhhhhhhttyhnfghgfh IT資訊交流網(wǎng) 自定義標簽例子6定制一個用于迭代輸出集合(List)中所有元素的
15、標簽: $ * $stu.age IT資訊交流網(wǎng) 自定義標簽例子7定制一個用于迭代輸出集合(Set)中所有元素的標簽: $ * $stu.age IT資訊交流網(wǎng) 自定義標簽例子8定制一個用于迭代輸出數(shù)組中所有元素的標簽: $*$stu.age IT資訊交流網(wǎng) 自定義標簽例子9定制一個用于迭代輸出(數(shù)組、List、set)中所有元素的標簽: List: $*$stu.age IT資訊交流網(wǎng) 自定義標簽例子10定制一個用于迭代輸出(Map)中所有元素的標簽: $stu.key*$stu.value*$stu.value.age*$ IT資訊交流網(wǎng) 自定義標簽例子11定制一個用于迭代輸出(數(shù)組、Li
16、st、set、Map)中所有元素的標簽: $*$stu.age map處理 $stu.key*$stu.value*$stu.value.age*$IT資訊交流網(wǎng) EL 自定義函數(shù)EL 自定義函數(shù):在 EL 表達式中調(diào)用的某個 Java 類的靜態(tài)方法,這個靜態(tài)方法需在 web 應(yīng)用程序中進行配置才可以被 EL 表達式調(diào)用。EL 自定義函數(shù)可以擴展 EL 表達式的功能,讓 EL 表達式完成普通 Java 程序代碼所能完成的功能。IT資訊交流網(wǎng) EL 自定義函數(shù)開發(fā)步驟編寫 EL 自定義函數(shù)映射的Java 類中的靜態(tài)方法: 這個 Java 類必須帶有 public 修飾符,方法必須是這個類的帶有
17、public 修飾符的靜態(tài)方法編寫標簽庫描述文件(tld 文件), 在 tld 文件中描述自定義函數(shù)在 JSP 頁面中導入和使用自定義函數(shù)IT資訊交流網(wǎng) 在 tld 文件中描述 EL 自定義函數(shù)為了能夠讓一個 Java 類的靜態(tài)方法可以被 EL 表達式調(diào)用,需要在一個標簽庫描述文件(tld 文件)中對 EL 自定義函數(shù)進行描述,已將 Java 類中的靜態(tài)方法映射成一個 EL 自定義函數(shù)IT資訊交流網(wǎng) 在 tld 文件中描述 EL 自定義函數(shù) my el function myelfunction0.1itcastelhttp:/ toGBK cn.itcast.el.ELFunctionDef
18、ined java.lang.String toGBK(java.lang.String)IT資訊交流網(wǎng) 在 JSP 頁面中導入和使用 EL 自定義函數(shù)在標準 JSP 頁面中使用 taglib 指令來引入 tld 文件: uri:屬性用于指定所引入的標簽庫描述(tld)文件中所定義的 元素的內(nèi)容;prefix 屬性用于為引入的 tld 文件指定一個”引用代號”。Prefix 屬性可以由 jsp 文件的作者任意指定,只要與其他 taglib 指令的 prefix 屬性值不同就可以。調(diào)用 EL 自定義函數(shù): $itcasel:aa(param.username)IT資訊交流網(wǎng) 練習編寫 3 個 E
19、L 自定義函數(shù):計算輸入字符串的長度完成對字符串的截取完成兩個數(shù)相除的功能 gbk $itcastel:toGBK(param.username) utf-8:$itcastel:toUTF8(param.username) subString -$itcastel:subString(param.username,1,4) getLength: itcastel:getLength(param.username) IT資訊交流網(wǎng) jstl fn 函數(shù) (1)為了簡化在 JSP 頁面操作字符串,JSTL 中提供了一套 EL 自定義函數(shù),這些自定義函數(shù)包含了 JSP 頁面經(jīng)常要用到的字符串操作在JSTL的表達是中要使
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 仙居拓展活動方案
- 浙江省寧波市鎮(zhèn)海區(qū)2023-2024學年四年級下學期數(shù)學期末試卷(含答案)
- 令牌抽獎活動方案
- 以自我為中心活動方案
- 儀態(tài)展示活動方案
- 任務(wù)激勵活動方案
- 2024年貴州省高考歷史真題試卷(含答案)
- 企業(yè)EAP活動方案
- 企業(yè)五四植樹活動方案
- 企業(yè)黨員示范崗活動方案
- 國家融通地產(chǎn)所屬單位招聘筆試題庫2025
- 醫(yī)學職業(yè)防護課件
- 遼寧中考:歷史必考知識點
- 職業(yè)技術(shù)學院化工裝備技術(shù)專業(yè)人才培養(yǎng)調(diào)研報告
- 污染源法規(guī)培訓
- 醫(yī)療數(shù)據(jù)化下的醫(yī)生職業(yè)轉(zhuǎn)型路徑
- (四調(diào))武漢市2025屆高中畢業(yè)生四月調(diào)研考試 英語試卷(含答案)
- GB/T 45472-2025架空和綜合管廊用預制保溫管道
- 中原農(nóng)業(yè)保險招聘題
- 公司3c產(chǎn)品管理制度
- 二零二五車貸居間服務(wù)合同
評論
0/150
提交評論