一.标签
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指令导入标签库,并通过指定后缀访问自定义标签