程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 解析JSP中標簽庫

解析JSP中標簽庫

編輯:關於JSP

標簽庫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.重載public int doStartTag()throws JspException方法。

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接口的方法
public void setPageContext (PageContext ctx)    生成的servlet在請求處理器執行其它任務前首先調用此方法,實現類應保存上下文對象以便它可以在標簽生命期中使用。從頁面上下文中標簽處理器可以訪問所有JSP隱含對象。
public void setParent(Tag p)    使用一個標答可以找到操作棧中它上面的標簽。在setPageContext後立即調用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved