1.什么是自定义标签
用户定义的一种自定义jsp标记,当一个含有自定义标记的jsp页面被jsp引擎编译成servlet时,tag标签被转换成了一个称为标签处理类的对象的操作,于是,当jsp页面被jsp引擎转换成servlet后,实际上tag标签被转化为了对tag处理类的操作。(开发自定义标签的核心就是编写处理器类)
2.标签的形式
1)空标签
例如:<hello/>
2)带有属性的标签
例如:<max num1="3" num2="5"/>
3)带有内容的标签
例如:
<greeting>
hello
</greeting>
4)带有内容和属性的标签
例如:
<greetingname="Tom">
hello
</greeting>
3.自定义标签的开发与应用步骤1)编写完成标签功能的Java类(标签处理器)
2)编写标签库描述(tld)文件,在tld文件中对自定义标签进行描述
3)在jsp页面导入和使用自定义标签
4 以HelloWorld为例演示如何创建自定义标签
①. 创建一个标签处理器类: 实现 SimpleTag 接口.
②. 在 WEB-INF 文件夹下新建一个 .tld(标签库描述文件) 为扩展名的 xml 文件. 并拷入固定的部分: 并对
description, display-name, tlib-version, short-name, uri 做出修改
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>JSTL 1.1 core library</description>
<display-name>JSTL core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>c</short-name>
<uri>http://java.sun.com/jsp/jstl/core</uri>
</taglib>
③. 在 tld 文件中描述自定义的标签:
<!-- 描述自定义的 HelloSimpleTag 标签 -->
<tag>
<!-- 标签的名字: 在 JSP 页面上使用标签时的名字 -->
<name>hello</name>
<!-- 标签所在的全类名 -->
<tag-class>com.atguigu.javaweb.tag.HelloSimpleTag</tag-class>
<!-- 标签体的类型 -->
<body-content>empty</body-content>
</tag>
④. 在 JSP 页面上使用自定义标签:
> 使用 taglib 指令导入标签库描述文件: <%@taglib uri="http://www.atguigu.com/mytag/core" prefix="atguigu" %>
> 使用自定义的标签: <atguigu:hello/>
5. setJspContext: 一定会被 JSP 引擎所调用, 先于 doTag, 把代表 JSP 引擎的 pageContext 传给标签处理器类.
例如:
private PageContext pageContext;
@Override
public void setJspContext(JspContext arg0) {
System.out.println(arg0 instanceof PageContext);
this.pageContext = (PageContext) arg0;
}