`

编写自己的定制标记库运行原理(四)

阅读更多

通过阅读前三篇文章,已经可以搞定自己的定制标记库了,但是如果不熟悉定制标记运行原理,如果遇到错误可能会不知所措,这篇文章就介绍一下定制标记运行原理。

1.JspTag接口

   前面的实例都实现了TagSupport类,并没有直接使用JspTag接口,但实际上标记处理类必须要实现JspTag接口。JspTag接口定义在javax.servlet.jsp.tagext包中,它只是一个标识接口,没有定义任何方法,所有标记处理类必须实现这个接口。 

   javax.servlet.jsptagext包中还包括IterationTag接口、BodyTag接口、SimpleTag接口、TagSupport类、BodyTagSupport类和simpleTagSupport类,它们之间的继承关系如下:

 

JspTag接口

                |

                 -----------Tag接口

                |                     |

                |                      ----------IterationTag接口

                |                                                          |

                |                                                           ---------------------TagSupport类

                |                                                          |                                             |

                |                                                          ----------------BodyTag接口       |

                |                                                                                            |           |

                |                                                                                             ---------BodyTagSupport类

                |

                 -----------SimpleTag接口

                                                   |

                                                    --------SimpleTagSupport类

Tag接口:

             这个接口中定义了编写标记处理类所要实现的基本方法,其中包括一下方法:doStartTag(),doEndTag(),getParent(),release()和setPageContext()方法,其中doStartTag()和doEndTag()方法是最常用的方法。doStartTag()方法在执行到定制标记的开始标记时被调用,doEndTag()方法在执行到定制标记的结束标记时被调用。

             在实际编写标记处理类的时候一般不需要直接实现这个接口,通常是继承已经实现了这个接口的TagSupport或者BodyTagSupport类。

IterationTag接口:

             这个接口继承自Tag接口,新增加了一个doAfterBody()方法,通常这个方法可以实现对定制标记所包含的内容的循环操作。

             doAfterBody()方法只有当doStartTag()方法返回值为EVAL_BODY_INCLUDE时才会被调用。调用doAfterBody()方法,如果返回值是EVAL_BODY_AGAIN,那么将再次运行定制标记所包含的内容并再次调用doAfterBody()方法,直到doAfterBody()方法的返回值为SKIP_BODY,这样就实现对定制标记所包含的操作内容。

TagSupport类:

        这个类是我们编写定制标记最常使用的类,实际上它是一个帮助类,可以帮助我们快捷地编写标记处理类,他实现了IterationTag接口。我们编写标记处理类的时候可以直接继承这个类,重写自己所需要的方法,而不需要直接实现IterationTag或者Tag接口。这里使用的设计模式中的缺省适配器模式。

        一个继承TagSupport的标记处理类表示这个标记可以显示定制标记所包含的内容,但是不能对所包含的内容进行编辑、改造。如果需要对所包含的内容进行编辑,需要继承BodyTagSupport类

TagSupport类的调用过程如下:

 

 

0
1
分享到:
评论

相关推荐

    基于Java的实例源码-增强现实标记跟踪软件库 AccuTag.zip

    【描述】描述中的“基于Java的实例源码”表明这个AccuTag库是一个可编程的工具,开发者可以下载并研究其源代码,理解其工作原理,甚至根据自己的需求进行定制和扩展。增强现实标记跟踪是AR技术的关键组成部分,通过...

    菜单编写原理

    压缩包中的"VC++菜单编写原理及实例程序"包含了实际操作的例子,通过运行和分析源代码,你可以更好地理解上述原理。这些例子通常会展示如何创建资源、处理消息、动态修改菜单以及如何在程序中显示和响应菜单。 总...

    基于java的增强现实标记跟踪软件库 AccuTag.zip

    AccuTag是一款基于Java开发的增强现实(AR)标记跟踪软件库,专为开发者提供高效、精准的标记识别和跟踪功能。在AR技术中,标记是实现虚拟与现实世界交互的关键元素,它们可以是二维条形码、二维码或特定图案,通过...

    编译原理试卷、试题库

    这份"编译原理试卷、试题库"提供了一种实践性极强的学习方式,通过解答题目,我们可以检验自己对编译原理的理解程度,同时巩固理论知识,提升实际应用能力。对于准备面试、考试或进一步研究编译器设计的人来说,这是...

    Ruby-Gimli将标记文件转换为pdf文件的工具

    Gimli的工作原理是解析输入的标记文件,将其内容结构化,然后利用PDF库生成对应的PDF输出。Ruby作为一种强大的动态编程语言,提供了丰富的库和API,使得Gimli能够高效地完成这个任务。它可能使用了诸如Prawn或PDF::...

    Java编写的HTML浏览器源码.zip

    Java编写的HTML浏览器源码.zip是一个包含源代码的压缩包,它揭示了如何使用...通过深入研究和实践,我们可以提升自己的Java编程技能,对浏览器的工作原理有更深入的理解,同时也可以为自己的开发工作积累宝贵的经验。

    WPFDevelopers自定义控件库

    在本文中,我们将深入探讨“WPF Developers自定义控件库”,这是一个专为Windows Presentation Foundation (WPF) 平台设计的桌面用户界面组件库。WPF是.NET Framework的一个重要部分,它为开发者提供了丰富的图形...

    前端开源库-artic

    在前端开发领域,开源库通常是一系列预先编写好的代码,它们提供了丰富的功能,帮助开发者快速构建Web应用程序。这类库往往由社区维护,支持持续更新和改进,并且遵循特定的开放源代码许可协议,允许开发者自由地...

    Junit单元测试内部机制解析

    - **加载测试类**:JUnit首先识别出标记为`@RunWith`注解的测试类,如果没有使用特定的运行器,那么默认使用JUnit的运行器。 - **实例化测试类**:对于每一个测试方法,JUnit都会创建一个新的测试类实例。 - **执行...

    Python库 | nest_desktop-3.0.1-py3-none-any.whl

    6. **跨平台兼容性**:作为标记为“none-any”的库,它应该能在不同平台上无缝运行。 7. **文档和示例**:一个好的库会有详细的文档和示例代码,帮助开发者快速上手和理解如何使用。 在实际开发中,开发者应查阅...

    marker-graphs:使用标记 JSON 数据格式绘制图形的可扩展库

    "可扩展库"表明该库设计灵活,可以适应多种需求,允许用户根据自己的需求进行定制和扩展。 **描述详解:** 描述中提到的 "标记图" 指的是使用特定的标记或点在图表上表示数据的一种方式,通常用于数据可视化。这个...

    micromark一个采用TypeScript编写的小巧快速的markdown解析器

    Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML(超文本标记语言)文档。Micromark是这个领域中的一个优秀解析器,它以TypeScript编写,具备小巧、快速的...

    以类似于标记的方式从文本生成流程图或序列图.zip

    同时,解压"mermaid_develop.zip"文件,查看里面的示例和源代码,有助于理解其工作原理并进行定制化开发。如果你对JavaScript和前端开发有一定基础,那么这个工具将帮助你提升工作效率,让图表制作变得更加简单和...

    编译原理课件 王容波

    《编译原理》是计算机科学领域的一门重要课程,它主要研究如何将高级程序设计语言转换为机器可执行的指令。...通过深入学习,开发者不仅可以编写更高效、更优化的代码,还能为特定应用领域定制自己的编程语言。

    Piwigo照片库.7z

    Piwigo是一款开源的照片管理软件,它允许用户创建和管理自己的在线照片库。这款强大的工具以其灵活性、易用性和丰富的功能而广受好评,尤其适合摄影师、艺术家或任何希望分享个人照片集的人。其.7z压缩文件“Piwigo...

    hfs.zip_HFS template_HFS怎么编写_hfs 模板_hfs制作模板_hfs模版下载

    总之,HFS模板是HFS文件服务器的重要组成部分,通过编写和定制模板,用户可以打造具有个性特色的网站或文件分享平台。理解HTML、CSS和JavaScript的基本原理,以及如何在`hfs.tpl`中应用它们,是成功创建HFS模板的...

    自己写的浏览器

    编写自定义浏览器时,要考虑跨平台和跨设备的兼容性,确保在多种环境下的正常运行。 总的来说,创建自己的浏览器是一项涉及广泛技术的复杂工程,涵盖前端开发、网络通信、操作系统交互、用户界面设计等多个方面。...

    前端开源库-fnguard

    通过查看源码,开发者可以更深入地理解其工作原理,同时也可以根据项目需求进行二次开发或定制。 总结来说,fnguard作为一个前端开源库,致力于提供JavaScript函数保护解决方案。它通过混淆、加密和运行时检测等...

    基于Python的定制HTML格式电子邮件.zip

    通过学习和实践这个Python项目,不仅可以掌握邮件发送的基本原理和技术,还可以提升对Python编程和调试的理解,这对于计算机科学的学生和初学者来说是非常宝贵的经验。同时,这也是一个很好的案例,展示了如何将...

    采用java编写的C语言词法分析器(可执行)

    在MyEclipse中运行这个Java编写的词法分析器,意味着开发者已经将该程序集成到MyEclipse的环境中。MyEclipse是Eclipse的一个扩展,主要用于Java、Web和企业级应用的开发。开发者可以利用其强大的调试和集成开发环境...

Global site tag (gtag.js) - Google Analytics