一,标签语言的特点
1、形式:<开始标签 属性="属性值">标签体</结束标签>
2、分类:
1、空标签: br、hr
2、ui标签:input、table
3、控制标签:if、foreach
4、数据标签:set标签、out标签
<a>标签语言的特点</a>
空标签<!--没有内容 -->
<br>
<hr>
UI标签
<table>
<tr></tr>
</table>
<input>
控制标签
<c:if test="true">输出</c:if>
<c:if test="false">不输出</c:if>
数据标签
<c:set var="name" value="aa"></c:set>
<c:out value="${ name}"></c:out>
(自定义jsp标签的意义:便捷自己的开发,能够根据自己的需求来调整标签的功能,动态的实现一些功能,提高开发效率。)
二,自定义标签(步骤)
1.创建一个标签助手类(继承BodyTagSupport)
2.创建标签库描述文件(tld),添加自定义标签的配置(tld文件必须保存到WEB-INF目录或其子目录)
3,jsp通过taglib引入自定义标签库
标签库描述文件
<?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>zking</short-name>
<uri>http://jsp/jstl/core</uri>
<tag>
<name>Dome01</name>
<tag-class>com.lgs.Dome01</tag-class>
<body-content>JSP</body-content>
</tag>
</taglib>
jsp通过taglib引入自定义标签库
<%@ taglib uri="/WEB-INF/zking.tld" prefix="z"%>
<z:Dome01>Dome1</z:Dome01>
1、标签的开发场景(三条路线)
1、doStartTag——SKIP_BODY——doEndTag
2、doStartTag——EVAL_BODY_INCLUDE——doAfterBody——EVAL_PAGE——doEndTag
3、doStartTag——EVAL_BODY_INCLUDE——doAfterBody——EVAL_BODY_AGAIN(N次)——doEndTag
2、返回值
1、SKIP_BODY:跳过主体
2、EVAL_BODY_INCLUDE:计算标签主体内容并[输出]
3、EVAL_BODY_AGAIN:再计算主体一次
4、EVAL_PAGE:计算页面的后续部分
5、SKIP_PAGE:跳过页面的后续部分
论证三条路线的执行顺序
package com.xyl;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
三种路线(根据生命周期图整理出来的)
1.dostartTag...skipBody...doEndTag
2.dostartTag...EVAL_BODY_INCLUDE...doAfterBody...EVAL_PAGE...doEndTag
3.dostartTag...EVAL BODN INCLUDE...doAfterBody...EVAL_BODY_AGAIN...doAfterBody...EVAL_BODY_AGAIN...doAfterBody...EVAL_BODY_AGAIN...doEndTag
*/
public class Dome01 extends BodyTagSupport{
//开始标签
public int doStartTag() throws JspException {
System.out.println("Dome1...doStartTag...进来了");
return EVAL_BODY_INCLUDE;
}
//结束标签
public int doEndTag() throws JspException {
System.out.println("Dome1...doEndTag...进来了");
return super.doEndTag();
}
}
public class Dome02 extends BodyTagSupport{
//开始标签
public int doStartTag() throws JspException {
System.out.println("Dome2...doStartTag...进来了");
return EVAL_BODY_INCLUDE;
}
//标签体
@Override
public int doAfterBody() throws JspException {
System.out.println("Dome2...doAfterBody...进来了");
return EVAL_PAGE;
}
//结束标签
public int doEndTag() throws JspException {
System.out.println("Dome2...doEndTag...进来了");
return super.doEndTag();
}
}
public class Dome03 extends BodyTagSupport{
//开始标签
public int doStartTag() throws JspException {
System.out.println("Dome3...doStartTag...进来了");
return EVAL_BODY_INC