频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

JSP/Servlet/JSF中对标签库的深入研究(2)

作者: zxm0591 出处:赛迪网 2008-03-05 09:19    砖    好    评论   进入论坛
阅读提示:标签处理器和标签附加信息需要定位在JSP容器类载入器可以找到的地方。标签库描述器可在URL指定的符意位置。JSP1.1规范要求JSP容器接受一个打包成因定结构的JAR文件的标签库。

Tag接口的方法

public void setPageContext (PageContext ctx)    生成的servlet在请求处理器执行其它任务前首先调用此方法,实现类应保存上下文对象以便它可以在标签生命期中使用。从页面上下文中标签处理器可以访问所有JSP隐含对象。
public void setParent(Tag p)    使用一个标答可以找到操作栈中它上面的标签。在setPageContext后立即调用。
public Tag getParent()    返回父标签。
public int doStartTag() throws Jsp    在设置了页面上下文、父标签和开始标记中编码的属性后调用。返回码表明JSP实现servlet是否就评估标签体。
public int doEndTag()throws JspException    当遇到结否标记时调用。返回码表明JSP是否就继纽页面的其余部份。
public void release()    确保在页面退出前被调用。释放资源并重置标签处理器状态。
TagSupport类的方法
public static Tag finAncestorWithClass(Tag thisTag, Class cls)    为所需的父标签处理器查找运行时标签栈。一个标签处理器可以提供其范围内子标签调用的方法。
public void setId(String id)    保存和检索在id属性中指定的名字。
public void setValue(String name, Object o)    在本地哈希表中设置指定名字的值。
public Object getValue (String name)    从本地哈希表中获取指定名称的值。
public void removeValue (String name)    从本地哈希表中删除指定名称的值。
public Enumeration getValues()    返回哈希表中关键字的一个枚举。

3、标签处理器的生命期

a.生成servlet需要创建标签处理器类的一个实例。实现方式通常是调用JSP容器的工厂类的一个方法,工厂类包含一个标签处理器实例池以使其可重用不再处于激活状态的对象。

b.初始化标签处理器,使servlet获知其存在性。servlet通过调用标签处理器的两个方法实现此过程:setPageContext(PageContext ctx)和setParent(Tag parent)。

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类的方法

public void flush()throws IOException    复写JspWrite.flush()方法以便它总是产生溢出。刷新写入已失效,因为它没有连接到将被写入的实际输出流中。
public void clearBody()    重置BodyContent缓存为空。
public Reader getReader()    返回Reader读取体内容。
public String getString()    返回包含体内容的一个字符串。
public void writeOut(Write w)    将体内容写入指定输出。
public JspWrite getEnclosing Write()    返回栈中下一个更高的写入者对象(可能是另一个BodyContent对象)。

BodyTag接口定义了一个新的整型常量

EVAL_BODY_TAG    当doStartTag()返回时,使得新的BodyContent对象被创建并与此标签处理器相关联。当doAfterBody()返回时,使得JSP servlet在修改完此标签控制的任意变量后再次评估体。

BodyTag接口的方法

public void setBodyContern (BodyContent out)    在当前JspWriter已被写入,一个新的BodyContent在被创建后由Jsp servlet调用,它发生在doStartTag()之后。
public void doInitBody() throws JspException    setBodyContent()之后,体被评估前调用的生命期方法。如果多次评估体,此方法只调用一次。
public init doAfterBody() throws JspException    体被评估后,BodyContent写入者仍处于激活状态时调用的生命期方法。此方法必须返回EVAL_BODY_TAG或SKIP_BODY,若返回EVAL_BODY_TAG时体再次被评估。

BodyTagSupport类的方法

public int doStartTag() throws JspException    复写TagSupport中的doStartTag()方法。
public int doEndTag() throws JspException    调用TagSupport中的doEndTag()方法,返回结果。
public void setBodyContent (BodyContent out)    在一保护成员变量bodyContent中保存新的体内容对象,子类可直接访问此对象。
public void doInitBody() throws JspException    缺省什么都不做。被需要执行初始化的子类所复写。
public int doAfterBody() throws JspException    每次体被评估后由JSP servlet调用,体同容对象仍处于激活状态。返回SKEP_BODY或EVAL_BODY_TAG则体再次被评估
public void release()    设置bodyContent对象为null,然后调用super.release()。
public BodyContent getBodyContent()    返回bodyContent变量。子类已经可以访问保护变量,但此方法允许无关的标签处理类对此体内容发送输出。
public JspWriter getPreviousOut()    在bodyContent变量上调用getEnclosingWriter()并返回结果的简便方法。

5、体标签处理器的生命期

a.生成servlet需要创建标签处理器类的一个实例。实现方式通常是调用JSP容器的工厂类的一个方法,工厂类包含一个标签处理器实例池以使其可重用不再处于激活状态的对象。
b.初始化标签处理器,使servlet获知其存在性。servlet通过调用标签处理器的两个方法实现此过程:setPageContext(PageContext ctx)和setParent(Tag parent)。
c.如果标签具有属性,属性的取值通过处理器提供setter方法传入到对象。属性setter方法是一个标签支持属性所需的唯一方法。
d.页面的上下文和父标签已被调置,并已具备属性。调用标签处理器的doStartTag()方法,该方法可以读取这些变量并执行实现标答功能所需的计算和操作。

doStartTag()方法必须返回一个整型数。

返回EVAL_BODY_TAG则正常处理标签体(跳到e);
返回SKIP_BODY则从初始JSP页面中直到此标签结束标记处的内容均被忽略。(跳到f)


共3页: 上一页 [1] 2 [3] 下一页
【内容导航】
关于 JSP  Servlet  JSF  标签库  Java
专题
Java实用开发全集
Java类的基础教程专题
Java发展动态专题
Java编程开发手册
Java基础教程
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看68743次)
·UML类图详解 (查看63050次)
·UML统一建模语言 (查看34321次)
·C#技术开发指南 (查看32568次)
·Java编程开发手册 (查看30790次)
·Java编程开发手册 (1196个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (308个砖)
·.NET开发手册 (238个砖)
·PB开发教程 (223个砖)
·Java编程开发手册 (654个好)
·Java基础教程 (574个好)
·.NET开发手册 (271个好)
·PB开发教程 (212个好)
·Delphi开发技术手册 (187个好)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。