自定义JSP标签库
客户化JSP标签技术是在JSP 1.1版本中才出现的,它支持用户在JSP文件中自定义标签,这样可以使JSP代码更加简洁。这些可重用的标签能处理复杂的逻辑运算和事务,或者定义JSP网页的输出内容和格式。
创建自定义标签的步骤:
- 创建标签的处理类
- 创建标签库描述文件
- 在JSP文件中引入标签库,然后插入标签,例如:<mm:hello/>
标签库处理类:
- Servlet容器编译JSP网页时,如果遇到自定义标签,就会调用这个标签的处理类。
- 标签处理类必须扩展以下两个类之一:
- – javax.servlet.jsp.tagext.TagSupport
- 主要方法:
- doStartTag Servlet容器遇到自定义标签的起始标志时调用该方法
- doStartTag()方法返回一个整数值,用来决定程序的后续流程。它有两个可选值: – Tag.SKIP_BODY 表示标签之间的内容被忽略。– Tag.EVAL_BODY_INCLUDE
表示标签之间的内容被正常执行。
- doStartTag()方法返回一个整数值,用来决定程序的后续流程。它有两个可选值: – Tag.SKIP_BODY 表示标签之间的内容被忽略。– Tag.EVAL_BODY_INCLUDE
- doEndTag Servlet容器遇到自定义标签的结束标志时调用该方法
- doEndTag()方法返回一个整数值,用来决定程序后续流程。它有两个可选值: – Tag.SKIP_PAGE 表示立刻停止执行JSP网 页,网页上未处理的静态内容和JSP程序均 被忽略,任何已有的输出内容立刻返回到 客户的浏览器上。Tag.EVAL_PAGE 表示按正常的流程继续执 行JSP网页。
- doStartTag Servlet容器遇到自定义标签的起始标志时调用该方法
- 常用方法:
- setValue(String k,Object o) 在标签处理类中设置key/value
- getValue(String k) 在标签处理类中根据参数key返回匹配的value
- removeValue(String k) 在标签处理类中删除key/value
- setPageContext(PageContext pc) 设置PageContext对象,该方法由Servlet容器在调用doStartTag或doEndTag方法前调用
- setParent(Tag t) 设置嵌套了当前标签的上层标签的处理类,该方法由Servlet容器在调用doStartTag或doEndTag方法前调用
- getParent() 返回嵌套了当前标签的上层标签的处理类
- 两个重要属性:
- parent:代表嵌套了当前标签的上层标签的处理类
- pageContext : 代表Web应用中的javax.servlet.jsp.PageContext对象
- JSP容器在调用doStartTag或doEndTag方法前,会先调用setPageContext和setParent方法,设置pageContext和parent。在doStartTag或doEndTag方法中可以通过getParent方法获取上层标签的处理类;在TagSupport类中定义了protected类型的pageContext成员变量,因此在标签处理类中可以直接访问pageContext变量。
- 用户可以在自定义标签中包含属性:例如: <prefix:mytag username=“zhangsan"> …… …… </prefix:mytag> 。在标签处理类中应该将这个属性作为成员变量,并且分别提供设置和读取属性的方法,
- 主要方法:
- – javax.servlet.jsp.tagext.BodyTagSupport
- – javax.servlet.jsp.tagext.TagSupport
标签库描述文件:
- 标签库描述文件的后缀: .tld (是一个标准的xml文件)
- 存放位置:必须和web.xml放在同一个目录下(也就是WEB-INF目录下)。
在jsp中引入标签:
- 在test.jsp中加入引用mytaglib(处理类)的taglib指令:
<%@ taglib uri="/mytaglib" prefix="mm" %> 以上taglib指令中,prefix属性用来指定引用mytaglib标签库时的前缀。
- 在test.jsp文件中插入hello标签: <b><mm:hello/>