JSP自定义标签(基础)

 

目录

一.标签

1.什么是标签

2.标签的特点

二.自定义标签

1.什么是自定义标签?

2.自定义标签生命周期

3.如何开发使用自定义标签?

步骤:

五。总结


一.标签

1.什么是标签

标签(Tag):是一种特殊的语言构造,通常用于在一些具有特定功能的语言中指定标记或元数据,从而实现一些特殊的效果或功能。很多与“ML”结尾的语言都是标记语言,比如:HTML,XML,XHTML,VML等等。标记语言与其他语言一样,也需要运行它们的环境,比如HTML的运行环境时浏览器,XML也要自己的解析和运行的环境。

2.标签的特点

  1. 标签语言特点 <开始标签 属性="属性值">标签体</结束标签>

    1. 标签的种类        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                        空标签 <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指令导入标签库,并通过指定后缀访问自定义标签

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值