标签的基本概念:
标签(Tag):
- 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的
标签库(Tag library):
- 由一系列功能相似、逻辑上互相联系的标签构成的集合
标签处理类(Tag Handle Class):
- 标签处理类似是Java类,这个类继承了TagSupport或者扩展了SimpleTag接口,通过这个类可以实现自定义JSP标签的具体功能
标签库描述文件(Tag Library Descriptor):
- 它是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系。它是一个配置文件,和web.xml是类似的。
标签语言的特点:
- <开始标签 属性=“属性值”>标签体</结束标签>
- 空标签:
- 开始标签:<>
- 结束标签:</>
通过以下实践我们会慢慢领悟自定义标签生命周期图:
- SKIP_BODY:跳过主体
EVAL_BODY_INCLUDE:计算标签主体内容并[输出]
EVAL_BODY_BUFFERED:计算标签主体内容并[缓存]
EVAL_PAGE:计算页面的后续部分
SKIP_PAGE:跳过页面的后续部分
EVAL_BODY_AGAIN:再计算主体一次
Jsp标签所需要的包 :
普通的C标签如下图:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set value="zhansan" var="name"></c:set>
---------
<c:out value="${name}"></c:out>
</body>
</html>
网页显示如下:
如何自定义标签?
- 点开C标签uri里面的的链接:http://java.sun.com/jsp/jstl/core ,可以把里面的内容复制到自己想定义的标签里去
- 再把里面的前几条名字改掉,比如我们来定义一个Z标签,如图:
在到自己定义的类里面去写 如下图
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/zking" prefix="z"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set value="zhansan" var="name"></c:set>
---------
<c:out value="${name}"></c:out>
-----------------
<z:set value="lisi" var="zname"></z:set>
<z:out value="${zname }">
</z:out>
</body>
</html>
网页显示如下:
- 标签库的运作离不开tld文件
- 标签库的标签是定义在tld中的tag标签内(助手类)
下面我们来实践,定义一个自己的标签
- 首先我们来定义一个自己的标签,叫做Demo标签
<?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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>zking 1.1 core library</description>
<display-name>zking core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>c</short-name>
<uri>/zking</uri>
<tag>
<!-- 标签库中的标签(类似c:set c:out的定义) -->
<name>catch</name>
<!-- 下面是标签运行的具体代码,也就是助手类,填写的是助手类的全路径名 -->
<tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
<!-- JSP是固定的写法 -->
<body-content>JSP</body-content>
<attribute>
<!-- 该标签的属性 -->
<name>var</name>
<!-- 该属性是否必填 -->
<required>false</required>
<!-- 是否支持表达式 -->
<rtexprvalue>false</rtexprvalue>
</attribute>