目录
一.标签
1.什么是标签
标签(Tag):是一种特殊的语言构造,通常用于在一些具有特定功能的语言中指定标记或元数据,从而实现一些特殊的效果或功能。很多与“ML”结尾的语言都是标记语言,比如:HTML,XML,XHTML,VML等等。标记语言与其他语言一样,也需要运行它们的环境,比如HTML的运行环境时浏览器,XML也要自己的解析和运行的环境。
2.标签的特点
标签语言特点 <开始标签 属性="属性值">标签体</结束标签>
标签的种类 空标签 <hr/> <开始标签></结束标签> <开始标签/> 标签体标签 是指包含主体内容的标签,标签体标签的处理需要对标签的主体内容进行解析和处理,例如<if>标签和<foreach>标签等
二.自定义标签
1.什么是自定义标签?
自己定义的一种规则,可以在jsp页面通过url应用。例如我们使用的c标签就是别人写好的标签。
2.自定义标签生命周期
3.如何开发使用自定义标签?
步骤:
2.1 创建一个标签助手类(继承BodyTagSupport) 标签属性必须与助手类的属性对应、且要提供对应get/set方法 rtexprvalue
2.2 创建标签库描述文件(tld),添加自定义标签的配置 注:tld文件必须保存到WEB-INF目录或其子目录 jstl标签库
2.3 在JSP通过taglib指令导入标签库,并通过指定后缀访问自定义标签
当我们使用了自定义标签后的运行效果:
第一步:实例助手类:outtag
代码如下:
package com.lya.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
* 标签的使用:实例助手类
*
* @author :李永安
* @date :2023年6月23日 上午9:50:38
*/
public class outtag extends BodyTagSupport {
// 标签的使用:
// 2.1 创建一个标签助手类(继承BodyTagSupport)
// 标签属性必须与助手类的属性对应、且要提供对应get/set方法
// 2.2创建标签库描述文件(tld),添加自定义标签的配置
private String aa;//给定的值
private String bb;//默认输出的值
public String getAa() {
return aa;
}
public void setAa(String aa) {
this.aa = aa;
}
public String getBb() {
return bb;
}
public void setBb(String bb) {
this.bb = bb;
}
@Override
public int doStartTag() throws JspException {
JspWriter out = this.pageContext.getOut();
try {
if(this.aa == null || "".equals(this.aa)) {
//利用jspwrite输出
out.println(this.bb);
} else {
out.println(this.aa);
}
} catch (Exception e) {
e.printStackTrace();
}
return SKIP_BODY;
}
}
实例助手类:iftag
代码如下:
package com.lya.tag;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class iftag extends BodyTagSupport{
private boolean cc;
public boolean isCc() {
return cc;
}
public void setCc(boolean cc) {
this.cc = cc;
}
@Override
public int doStartTag() {
if(this.cc) {
return EVAL_BODY_INCLUDE;
}
return SKIP_BODY;
}
}
第二步:创建标签库描述文件(tld)
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<!-- 代表标签库的版本号 -->
<tlib-version>1.0</tlib-version>
<!-- 代表jsp的版本 -->
<jsp-version>1.2</jsp-version>
<!-- 你的标签库的简称 -->
<short-name>test</short-name>
<!-- 你标签库的引用uri -->
<uri>/zking</uri>
<tag>
<!-- 标签名 -->
<name>out</name>
<!-- 标签工具类 -->
<tag-class>com.lya.tag.outtag</tag-class>
<!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 -->
<body-content>jsp</body-content>
<!-- 自定义标签的属性定义,请注意一定要在标签类中提供对应的get/set方法 -->
<attribute>
<!-- 自定义标签的属性名称 -->
<name>aa</name>
<!-- true表示必填 -->
<required>true</required>
<!-- true支持动态值,可以向值里面填jsp表达式、EL表达式,false则不支持 -->
<rtexprvalue>true</rtexprvalue>
<description>out标签aa属性,输出aa</description>
</attribute>
<attribute>
<!-- 自定义标签的属性名称 -->
<name>bb</name>
<!-- true表示必填 -->
<required>false</required>
<!-- true支持动态值,可以向值里面填jsp表达式、EL表达式,false则不支持 -->
<rtexprvalue>true</rtexprvalue>
<description>默认输出</description>
</attribute>
</tag>
<tag>
<!-- 标签名 -->
<name>if</name>
<!-- 标签工具类 -->
<tag-class>com.lya.tag.iftag</tag-class>
<!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 -->
<body-content>jsp</body-content>
<!-- 自定义标签的属性定义,请注意一定要在标签类中提供对应的get/set方法 -->
<attribute>
<!-- 自定义标签的属性名称 -->
<name>cc</name>
<!-- true表示必填 -->
<required>true</required>
<!-- true支持动态值,可以向值里面填jsp表达式、EL表达式,false则不支持 -->
<rtexprvalue>true</rtexprvalue>
<description>if标签cc属性,输出cc</description>
</attribute>
</tag>
</taglib>
第三步:引用标签库
代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="z" uri="/zking"%>
<!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>
<%
request.setAttribute("name", "zs");
%>
<!-- out 标签 -->
<z:out aa="${name}" bb="--" />
<z:out aa="eweg"></z:out>
<z:if cc="${100 == 100}">
测试if(100 == 100)
</z:if>
<z:if cc="${100 != 200}">
测试if(100 != 200)
</z:if>
<z:if cc="${100 == 200}">
测试if(100 != 200)
</z:if>
</body>
</html>
三.总结
1.自己定义的一种规则,可以在jsp页面通过url应用。例如我们使用的c标签就是别人写好的标签。
2.写自定义标签的步骤:
2.1 创建一个标签助手类(继承BodyTagSupport) 标签属性必须与助手类的属性对应、且要提供对应get/set方法 rtexprvalue
2.2 创建标签库描述文件(tld),添加自定义标签的配置 注:tld文件必须保存到WEB-INF目录或其子目录 jstl标签库
2.3 在JSP通过taglib指令导入标签库,并通过指定后缀访问自定义标签