自定义标签处理
标签库的组成部分
要求 | 特性 |
---|---|
标签处理程序 | 包含类的定义和定义标签功能的方法 |
标签描述符(TLD)文件 | 描述标签库的XML文件 |
使用Jsp标签作用:
(1)创建实现Tag接口或继承TagSupport类的标签处理程序。它定义标签执行的任务。
(2)使用TLD文件来映射标签与标签处理程序文件。
(3)Jsp文件包含taglib指令,指出标签的使用与标签的定义。
使用uri映射到标记库语法:
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
告诉容器此JSP将使用与uri相关联的标记库。可以通过一个tld文件将这个uri与一个标记库关联。
标签处理程序步骤
1、识别标签处理程序的结构(继承TagSupport类)
2、标签处理程序中常用方法在这里插入代码片
3、doStartTag()返回值
4、doEndTag()返回值
5、doAfterBody()返回值
标签描述符(TLD)文件
<taglib>
<tlib-version>1.2</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>pfc Web Taglib</short-name>
<uri>http://www.pfc.cn/taglib</uri>
<description>
An example tab library for Web Application.
</description>
<tag>
<name>heading</name>
<tag-class>pfc.taglibs.HeadingHandler</tag-class>
<body-content>JSP</body-content>
<description>heading</description>
<attribute>
<name>alignment</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>color</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
对上述tld文件中用到的标签做了说明
在taglib级上TLD文件的元素
标签 | 说明 |
---|---|
<tlib-version> | 标签库版本(1.2) |
<jsp-version> | 标签库依赖的Jsp版本(1.2) |
<short-name> | 标签库名(pfc Web Taglib) |
<uri> | 标签库唯一id(http://www.pfc.cn/taglib) |
<description> | 关于标签库详细信息 |
在tag级上TLD文件的元素
标签 | 说明 |
---|---|
<name> | 标签的名(heading) |
<tag-class> | 标签处理程序类(pfc.taglibs.HeadingHandler) |
<body-content> | 标签体的定义。empty:为空标签。JSP(默认):能放在JSP中的东西都能放在这个标记体中。tagdependent:标记体要看作纯文本,所以不会计算EL,也不会触发标记/动作,例如SQL语句。Scriptless:默认,标记体中不能有脚本元素,而脚本元素可以是sciptlet(<%…%>)、脚本表达式((<%=…%>))和声明(<%!..%>)。 |
<description> | 关于标签的详细信息 |
<attribute> | 关于标签的属性名与需求说明 |
在attribute级上TLD文件的元素
标签 | 说明 |
---|---|
<name> | 属性名 |
<required> | true:属性是必须的。false: 属性可有可无。 |
<rtexprvalue> | true:属性值可动态生成。false: 默认,属性值不可动态生成。例如:true代表,<xxx:yyyy zzz="<%= something %>" />标签库zzz的属性是<%= %>表达式的结果而非"<%= something %>"这几个字母 |
实例:
JSP主文件(GSTExample.jsp):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page language="java" contentType="text/html; charset=GB2312" %>
<%@ taglib uri="/WEB-INF/tagExampleTld/zxc.tld" prefix="GSTTag" %>
<HTML>
<HEAD><TITLE>自定义标签实例</TITLE></HEAD>
<BODY><CENTER><BR><BR>
<H3>这里调用一个标签:hello</H3>
<H3><GSTTag:Hello/></H3>
</CENTER></BODY>
</HTML>
tag文件(zxc.tld):
<?xml version="1.0" encoding="UTF-8" ?>
<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 web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>自定义标签实例</description>
<display-name>TAG</display-name>
<tlib-version>2.0</tlib-version>
<short-name>tagExampleTld</short-name>
<uri></uri>
<tag>
<description>这里调用一个标签:hello</description>
<name>Hello</name>
<tag-class>tagexample.tagexample</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
java文件(tagexample.java):
package tagexample;
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class tagexample extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.println("这里调用一个标签:hello的一个例子");
}
}
程序说明:
在zxc.tld文件中 和之间没有内容,所以在GSTExample.jsp文件中,uri取值为标记文件所在路径"/WEB-INF/tagExampleTld/gst.tld" ,即:
<%@ taglib uri="/WEB-INF/tagExampleTld/zxc.tld" prefix=“GSTTag” %>
在标签处理程序GSTExample.java中,getJspContext()返回JspContext类对象,该对象存储的是jsp页面上下文。
运行结果: