定制标记---简单标记处理器

  标记文件利用另一个页面(使用JSP)实现标记功能,标记处理器利用一个特殊的JAVA类实现标记功能。有两种类型的标记处理器:简单标记处理器和传统标记处理器。

1.建立一个简单标记处理器

1)开发定制标记处理器,扩展自SimpleTagSupport类

2)为标记创建一个TLD(taglib description),放在WEB-INF中

3)使用定制标记

4)attribute中的<rtexprvalue>非常重要,它告诉你属性的值是在转换时计算,还是在运行时计算,<rtexprvalue>默认值为false,即属性值只接受一个String直接量。如果<rtexprvalue>值为true,则属性值可以接受三种表达式:

5)只有当标记的<body-content>元素不是empty时,这个标记才能有体。<body-content>元素的取值可以如下:

2.容器怎样找到TLD

  在JSP 2.0之前,开发人员必须为TLD中的<uri>与TLD文件的具体位置之间指定一个映射。

  在JSP 2.0中,不必指定映射,容器会自动建立TLD和<uri>名之间的映射。容器建立映射时,会首先在DD中查找,看是否已有<taglib>项,如果有,就用这些设置来建立映射,如果没有,容器会在4个位置查找TLD:

1)直接在WEB-INF目录中查找;

2)直接在WEB-INF的一个子目录中查找;

3)在WEB-INF/lib下一个JAR文件中的META-INF目录中查找;

4)在WEB-INF/lib下一个JAR文件中的META-INF的子目录中查找;

3.简单标记API

4.简单标记处理器的生命周期

  简单标记处理器不会被容器重用。每个标记处理器实例只负责一次调用。

5.标记体中使用表达式

  假设有一个有体的标记,而且体中使用了一个属性的EL表达式。如果调用这个标记时该属性尚不存在,标记体要依赖标记处理器设置属性。

6.有属性的简单标记

  如果一个标记需要一个属性,就要在TLD中声明,并在标记处理器中为每个属性提供一个bean式的设置方法。

7.SkipPageException:停止处理页面

  如果使用标记的过程中出错,但是希望页面之前已经计算的部分还会作为响应出现,可以抛出SkipPageException。SkipPageException只停止直接调用标记的页面,不会影响它的外围页面。

8.为定制标记增加可选属性

  如果要为定制标记增加可选属性,首先,标记处理器类必须实现JSP API的DynamicAttribute接口,这个接口必须实现setDynamicAttribute()方法。这个方法需要存储属性的键值对,存储这个信息最佳的数据结构是hashmap:

  使用可选属性:

  TLD中的配置:

原文地址:https://www.cnblogs.com/juaner767/p/5509457.html