开发自定义标签步骤
1.创建自定义标签处理类(Tag Handler Class)
2.创建TLD标签库描述文件(Tag Library Desciptor)
web应用使用标签:
1.标签处理类和相关类.class文件放到WEB-INF/CLASS目录下
2.把TLD放到WEB-INF或者其自定义的子目录下
3.在web.xml中声明引用的标签库
4.在jsp中使用标签库中的标签。
JSP TAG API
运行jsp文件时遇到自定义的标签,就会调用这个标签的处理类相关方法。处理类可以继承TagSupport类或者BodyTagSupport。
JspTag接口
这是一个标识接口,没有任何方法。作为Tag和SimpleTag的共同接口。实现Tag接口的标签为传统标签。实现SimpleTag的标签为简单标签。
Tag接口
setPageContext(PageContext pc)//servlet容器调用这个方法,像当前Tag对象传递PageContext对象setParent(Tag t)//设置父标签getParent()release()//释放Tag占用的资源时调用doStartTag()当servlet容器遇到标签起始标志时调用这个方法,返回一个整数值,决定后续流程Tag.SKIP_BODY表示标签内主体内容被忽略Tag.EVAL_BODY_INCLUDE表示标签内主体被正常执行doEndTag()//标签结束时调用。返回整数值,决定后面流程Tag.SKIP_PAGE 标签后面的内容不执行,把已有的内容返回Tag.EVAL_PAGE 正常执行jsp代码执行jsp内容遇到自定义标签,就回去找Tag对象,没找到就创建一个,放到缓存中重复使用(web应用被终止是会调用relesse()方法)。创建完对象后调用对象相关方法。1.servlet容器调用setPageContext(PageContext pc),setParent(Tag t),不存在父标签就设置null.2.servlet容器调用一系列set方法,设置属性,没有属性就不用。
3.doStartTag()根据返回值做相关处理。
4.doEndTag()根据返回值做相关处理。
IterationTag接口
继承Tag接口,增加了反复执行主体内容的功能。
doAfterBody()方法在执行玩主体内容后调用,不执行主体内容不调用。
返回整数值,决定是否重复执行。
Tag.SKIP_BODY不重复执行主体内容了
Tag.EVAL_BODY_AGAIN重复执行标签主体内容
BodyTag接口--添加了直接访问和操纵标签主体的功能
setBodyContent(BodyContent bc)传递一个用于缓存标签结果的BodyContent对象。
doInitBody():setBodyContent()执行完后,执行标签主体之前调用,为执行标签主体做初始化工作。
标签主体为空或者doStartTag返回skip_body或者eval_body_include,上面两个方法不执行。
标签主体不为空以及doStartTag返回BodyTag.EVAL_BODY_BUFFERED才执行。
TagSupport和BodyBodySupport--自定义的标签继承这两个中的一个就行了。
创建message标签的处理类messageTag
1.创建资源文件
xxx.PRoperties放在WEB-INF目录下,使用键值对的形式。
2.web启动时加载资源文件
用一个servlet来加载资源文件,设置start-on-load为1,启动时就加载。保存在应用范围内。
3.创建messageTag
创建标签库描述文件
采用XML格式,其中元素分为3类:
<taglib>标签库元素
<tag>标签元素
<attribute>标签属性元素
1.taglib
tlib-version标签库版本
jsp-version jsp版本
short-name 标签库前缀名(prefix)
uri 设定标签库的唯一访问标识符
info 说明信息
2.tag
name 设置标签的名字
tag-class 处理类
body-content 标签主体类型 empty主体为空,scriptless主体不为空,包含EL表达式和jsp内置标签。jsp主体不为空,比scriptless多了一个脚本元素<%! %>等等。tagdependant 主体不为空,标签主体内容由处理类解析处理。
info 说明信息
3.attribute
name 属性名
required 属性是否为必须,默认false
rtexprvalue 属性值是否可以基于<%=%>等java表达式和EL表达式
把文件命名问xxx.tld
在web应用中使用标签
在web.xml加入taglib
<taglib><taglib-uri></taglib-uri>//标签库唯一标识符<taglib-location></taglib-location>//tld文件位置</taglib>然后使用jsp就可以访问<标签库的短名称:tag属性的name 属性=属性值 /><%@ taglib prefix="xx" uri="/xxx"%>
新闻热点
疑难解答