首页 > 编程 > JSP > 正文

自定义jsp标签

2019-11-08 03:12:18
字体:
来源:转载
供稿:网友

开发自定义标签步骤

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"%>


上一篇:jsp详解

下一篇:jsp中文乱码

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表