1.標(biāo)簽處理器的工作方式 a.導(dǎo)入javax.servlet.jsp和javax.servlet.jsp.tagext包。 b.實(shí)現(xiàn)javax.servlet.jsp.tagext包中的Tag接口或BodyTag接口。BodyTag是Tag的子接口。 c.繼續(xù)TagSupport類(lèi)或BodyTagSuppoert類(lèi)。它們是上述接口的缺省實(shí)現(xiàn)。 d.重載public int doStartTag()throws JspException方法。
2.標(biāo)簽處理器的接口與實(shí)現(xiàn) javax.servlet.jsp.tagext.Tag是實(shí)現(xiàn)標(biāo)簽的最基本的接口。 javax.servlet.jsp.tagext.TagSupport是實(shí)現(xiàn)Tag接口的具體類(lèi)。 通常情況下繼續(xù)tagSupport類(lèi)而不直接實(shí)現(xiàn)Tag接口通常是有益的。除了對(duì)所有必需方法提供了缺省實(shí)現(xiàn)外、還保存了pageContext對(duì)象及對(duì)嵌套標(biāo)簽的支持。 Tag接口包含4個(gè)常量,表示doStartTag()和doEndTag()方法可能的返回碼。 EVAL_BODY_INCLUDE 當(dāng)doStartTag()返回時(shí),指明servlet應(yīng)對(duì)標(biāo)簽體進(jìn)行評(píng)估。 SKIP_BODY 當(dāng)doStartTag()返回時(shí),指明servlet應(yīng)忽視標(biāo)簽體。 EVAL_PAGE 當(dāng)doEndTag()返回時(shí),指明頁(yè)面其余部分應(yīng)被評(píng)估。 SKIP_PAGE 當(dāng)doEndTag()返回時(shí),指明頁(yè)面其余部分就被跳過(guò)。 Tag接口的方法 public void setPageContext (PageContext ctx) 生成的servlet在請(qǐng)求處理器執(zhí)行其它任務(wù)前首先調(diào)用此方法,實(shí)現(xiàn)類(lèi)應(yīng)保存上下文對(duì)象以便它可以在標(biāo)簽生命期中使用。從頁(yè)面上下文中標(biāo)簽處理器可以訪問(wèn)所有JSP隱含對(duì)象。 public void setParent(Tag p) 使用一個(gè)標(biāo)答可以找到操作棧中它上面的標(biāo)簽。在setPageContext后立即調(diào)用。 public Tag getParent() 返回父標(biāo)簽。 public int doStartTag() throws Jsp 在設(shè)置了頁(yè)面上下文、父標(biāo)簽和開(kāi)始標(biāo)記中編碼的屬性后調(diào)用。返回碼表明JSP實(shí)現(xiàn)servlet是否就評(píng)估標(biāo)簽體。 public int doEndTag()throws JspException 當(dāng)碰到結(jié)否標(biāo)記時(shí)調(diào)用。返回碼表明JSP是否就繼紐頁(yè)面的其余部份。 public void release() 確保在頁(yè)面退出前被調(diào)用。釋放資源并重置標(biāo)簽處理器狀態(tài)。 TagSupport類(lèi)的方法 public static Tag finAncestorWithClass(Tag thisTag, Class cls) 為所需的父標(biāo)簽處理器查找運(yùn)行時(shí)標(biāo)簽棧。一個(gè)標(biāo)簽處理器可以提供其范圍內(nèi)子標(biāo)簽調(diào)用的方法。 public void setId(String id) 保存和檢索在id屬性中指定的名字。 public void setValue(String name, Object o) 在本地哈希表中設(shè)置指定名字的值。 public Object getValue (String name) 從本地哈希表中獲取指定名稱(chēng)的值。 public void removeValue (String name) 從本地哈希表中刪除指定名稱(chēng)的值。 public Enumeration getValues() 返回哈希表中要害字的一個(gè)枚舉。