J2EEJSP自定义标签库01out标签if标签

news2024/10/4 2:36:18

目录

一.什么是标签

二.JSP自定义标签库

2.1 JSP标签库是什么

2.2 处理流程

2.3 如何自定义标签 

2.4 标签类型

三.开发示例

3.1  out标签

1.创建助手类

2.编写tld(标签库的描述)文件,(必须放在WEB-INF目录或其目录下)

3.在页面使用

4.将项目部署运行,即可可到效果

3.2 if标签

1.创建助手类

2.编写tld(标签库的描述)文件,(必须放在WEB-INF目录或其目录下)

3.在页面使用


一.什么是标签

标记语言,是一种注释文本的语言,以便于计算机可以操作。很多与“ML”结尾的语言都是标记语言,比如:HTML,XML,XHTML,VML等等。
标记语言与其他语言一样,也需要运行它们的环境,比如HTML的运行环境时浏览器,XML也要自己的解析和运行的环境。

基本结构:
<开始标签>标签体</结束标签>

空标签:
<开始标签 属性名="属性值"/></结束标签>
<br/><br/>
<开始标签 属性名="属性值"/>

二.JSP自定义标签库

2.1 JSP标签库是什么

是一个JSP标签集合,它封装了JSP应用的通用核心功能, 基于JSP标签我们可以理解为,是JSP应该通用功能的一种封装方式

2.2 处理流程

2.3 如何自定义标签 

常见自定义标签主要步骤:

  • 编写助手类
  • 编写标签库描述文件(tld)
  • 在页面上引入标签使用

2.4 标签类型

  1. UI标签, 输出页面元素
  2. 控制标签, 如if标签,foreach标签等
  3. 数据标签,用于向页面输入数据

三.开发示例

3.1  out标签

1.创建助手类

public class OutTag extends BodyTagSupport {

	private String val;

	public String getVal() {
		return val;
	}

	public void setVal(String val) {
		this.val = val;
	}

	// 默认值
	private String defaultVal;

	public String getDefaultVal() {
		return defaultVal;
	}

	public void setDefaultVal(String defaultVal) {
		this.defaultVal = defaultVal;
	}

	@Override
	public int doStartTag() {
		//pageContext为页面上下文对象,用于和jsp共享数据
		JspWriter out = this.pageContext.getOut();
		try {
			if (this.val == null || "".equals(this.getVal())) {
				//利用JspWrite对象将val输出到页面
				out.print(this.getDefaultVal());
			}else {
				//利用JspWrite对象将val输出到页面
				out.print(this.val);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

		return SKIP_BODY;
	}

}

2.编写tld(标签库的描述)文件,(必须放在WEB-INF目录或其目录下)

<!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-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<uri>/zking</uri>

	<tag>
		<!-- 标签名 -->
		    <name>out</name>
		<!-- 标签助手类 -->
		    <tag-class>com.zking.tagdemo.tag</tag-class>
		<!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 -->
		    <body-content>empty</body-content>
	<attribute>
		<!-- 属性名, OutTag类中的val属性相匹配 -->
		    <name>val</name>
		<!-- 表示该属性为必要的属性 -->
		    <required>true</required>
		<!-- 该属性可以接受EL表示式的值 -->
		    <rtexprvalue>true</rtexprvalue>
		<!-- 标签描述,用于说明标签的作用 -->
		    <description>out标签val属性,用于输出val的值</description>
	</attribute>

	<attribute>
		<!-- 属性名, OutTag类中的val属性相匹配 -->
		    <name>defaultVal</name>
		<!-- 表示该属性为必要的属性 -->
		    <required>false</required>
		<!-- 该属性可以接受EL表示式的值 -->
		    <rtexprvalue>false</rtexprvalue>
		<!-- 标签描述,用于说明标签的作用 -->
		    <description>out标签defaultVal属性,用于输出defaultVal的值</description>
	</attribute>
		
	</tag>
	
</taglib>

3.在页面使用

<%@ 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>
	<z:out val="abc"/>
</body>
</html>

4.将项目部署运行,即可可到效果

3.2 if标签

1.创建助手类

public class IfTag extends BodyTagSupport{

	private boolean test = false;

	public boolean isTest() {
		return test;
	}

	public void setTest(boolean test) {
		this.test = test;
	}
	
	@Override
	public int doStartTag() {
		if(this.test) {
			return EVAL_BODY_INCLUDE;
		}
		
		return SKIP_BODY;
		
	}
}

2.编写tld(标签库的描述)文件,(必须放在WEB-INF目录或其目录下)

<!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-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<uri>/zking</uri>

	
	<tag>
			<!-- 标签名 -->
		<name>if</name>
			<!-- 标签助手类 -->
		<tag-class>com.zking.tagdemo.tag.IfTag</tag-class>
			<!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 -->
		<body-content>jsp</body-content>
	
	<attribute>
			<!-- 属性名, OutTag类中的val属性相匹配 -->
		<name>test</name>
			<!-- 表示该属性为必要的属性 -->
		<required>true</required>
			<!-- 该属性可以接受EL表示式的值 -->
		<rtexprvalue>true</rtexprvalue>
			<!-- 标签描述,用于说明标签的作用 -->
		<description>out标签test属性,用于输出test的值</description>
	</attribute>
	
	
	
	
	</tag>
	
</taglib>

3.在页面使用

<%@ 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>
	

	<z:if test="${100==100 }">
		测试if(100 == 100)
	</z:if>



</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LCD—STM32液晶显示(3.NOR FLASH时序结构体)

目录 LCD结构体配置 NOR FLASH时序结构体 FSMC的NOR FLASH初始化结构体 LCD结构体配置 NOR FLASH时序结构体 与控制SRAM时一样&#xff0c;控制FSMC使用NOR FLASH存储器时主要是配置时序寄存器以及控制寄存器&#xff0c;利用ST标准库的时序结构体以及初始化结构体可以很方便地…

第六章:string类

系列文章目录 文章目录 系列文章目录前言为什么学习string类C语言中的字符串ASCIIUnicode**UTF-8**UTF-16UTF-32 GBK 标准库中的string类string类总结 string类的常用接口说明1. string类对象的常见构造2. string类对象的容量操作3. string类对象的访问及遍历操作4. string类对…

亚马逊云科技十年出海经验,为中国企业提供跨越式发展

对于一座优秀的港口而言&#xff0c;不仅要求其所在的地理位置得天独厚以及拥有庞大的货运船舶吞吐量&#xff0c;能否为地区带来良好的发展生态&#xff0c;提供和创造新的就业机会也是重要的考量。对于很多中小企业而言&#xff0c;他们不具备大型企业的体量&#xff0c;在海…

vscode(Better Comments插件)在vue文件中不显示相对应的颜色

解决办法&#xff1a; 1、在.vscode文件下找到 aaron-bond.better-comments-3.0.2 &#xff08;我的路径&#xff1a;C:\Users\cown\.vscode\extensions\aaron-bond.better-comments-3.0.2&#xff09;&#xff0c;后面版本不唯一&#xff0c;根据自身情况辨别 2、进入文件路…

HTTPS概念wireshark分析

目录 密钥&加密算法CA & 数字证书https流程连接流程springboot项目启动httpswireshark分析https流程 密钥&加密算法 密钥&#xff1a;通常是一个字符串或数字&#xff0c;进行加密/解密算法时使用。公钥和私钥都是密钥&#xff0c;只不过一般公钥是对外开放的&…

如何在 Endless OS 上安装 ONLYOFFICE 桌面编辑器

ONLYOFFICE 桌面编辑器是一款基于依据 AGPL v.3 许可进行分发的开源办公套件。使用这款应用&#xff0c;您无需保持网络连接状态即可处理存储在计算机上的文档。本指南会向您介绍&#xff0c;如何在 Endless OS 上安装 ONLYOFFICE 桌面编辑器。 ONLYOFFICE 桌面版是什么 ONLYO…

Sencha ExtJS v1.0.4 扩展不能“转到定义“的解决办法

VSCode 的 Sencha 扩展自动更新到了 1.0.4&#xff0c;去除激活提示的方法和以前一样。 但是有扩展bug&#xff0c;就是无法转到定义&#xff0c;打开 VSCode 的开发者工具&#xff0c;由一堆报错。 解决办法&#xff1a;要修改下文件 C:\Users\xxx\.vscode\extensions\sench…

谷歌黑客语法与漏洞寻找

谷歌黑客语法与漏洞寻找 一、常见的搜索引擎二、Google部分语法三、通配符四、FOFA五、Shodan六、例子&#xff1a;常见的后台地址 一、常见的搜索引擎 浏览器 浏览器是用来检索、展示以及传递Web信息资源的应用程序。 搜索引擎 所谓搜索引擎&#xff0c;就是根据用户需求与一…

惊艳!AI创意字体真绝了;6道AIGC高频面试题与解答;为啥语音助手还没集成LLM;深度学习算法红宝书 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 惊艳&#xff01;手把手教你使用 Stable Diffusion 制作AI创意字体 最近AI创意字体刷爆了 ShowMeAI 社群&#xff01;伙伴们纷纷惊叹这…

OJ练习第139题——模拟行走机器人

模拟行走机器人 力扣链接&#xff1a;874. 模拟行走机器人 题目描述 机器人在一个无限大小的 XY 网格平面上行走&#xff0c;从点 (0, 0) 处开始出发&#xff0c;面向北方。该机器人可以接收以下三种类型的命令 commands &#xff1a; -2 &#xff1a;向左转 90 度 -1 &…

Pytorch:搭建卷积神经网络完成MNIST分类任务

2023.7.18 MNIST百科&#xff1a; MNIST数据集简介与使用_bwqiang的博客-CSDN博客 数据集官网&#xff1a;MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges MNIST数据集获取并转换成图片格式&#xff1a; 数据集将按以图片和文件夹名为标签的…

青岛大学_王卓老师【数据结构与算法】Week05_13_队列的顺序表示和实现1_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

DeepSpeed系列篇1:零门槛上手DeepSpeed实战(服务器部署及训练过程详解SFT)

1、建立虚拟环境 conda create -n dsnew python3.10 2、安装pytorch conda install pytorch torchvision torchaudio pytorch-cuda11.7 -c pytorch -c nvidia 3、安装deepspeed pip install deepspeed 4、下载DeepSpeedExamples并安装依赖 https://github.com/microsof…

一文了解DDD分层架构演进

1.3 分层架构演进 1.3.1 传统四层架构 将领域模型和业务逻辑分离出来&#xff0c;并减少对基础设施、用户界面甚至应用层逻辑的依赖&#xff0c;因为它们不属业务逻辑。将一个夏杂的系统分为不同的层&#xff0c;每层都应该具有良好的内聚性&#xff0c;并且只依赖于比其自身更…

arduinoIDE2.1.1最新版升级开发板(esp32-2.0.3升级2.0.10)方法总结(esp8266升级通用)

一、arduinoIDE 升级最新版 2.1.1方法 1.1.通过IDE2.x直接升级(推荐,速度还可以) 1.2.官网下载安装包覆盖升级(地址https://www.arduino.cc/en/software) 1.3 ESP8266升级方法雷同可参考(原理一样,最新好像是3.1.2) https://github.com/esp8266/Arduino/releases http…

C++入门知识点

目录 命名空间 命名空间定义 命名空间使用 法一&#xff1a;加命名空间名称及作用域限定符&#xff1a;&#xff1a; 法二&#xff1a;使用using部分展开&#xff08;授权&#xff09;某个命名空间中的成员 法三&#xff1a;使用using对整个命名空间全部展开&#xff08;授权…

Windows修改mysql服务的root密码

目录 步骤1、停止mysql服务2、使用命令行启动mysql服务&#xff0c;跳过密码验证3、密码置空4、关闭命令行启动的mysql服务并正常启动5、修改root密码 参考 步骤 1、停止mysql服务 以管理员身份打开终端&#xff0c;输入指令net stop mysql停止MySQL服务&#xff0c;停止服务…

PBOOTCMS登录请求发生错误,您可按照如下方式排查: 1、试着删除根目录下runtime目录,刷新页面重试;2、检查系统会话文件存储目录是否具有写入权限;

PBOOTCMS后台登录请求发生错误&#xff0c;您可按照如下方式排查&#xff1a; 1、试着删除根目录下runtime目录&#xff0c;刷新页面重试;2、检查系统会话文件存储目录是否具有写入权限&#xff1b; 以上提示其实就是&#xff0c;表单提交校验失败&#xff0c;请刷新后重试的提…

U盘文件修复怎么做?简单3步,快速修复u盘文件!

“很离谱&#xff01;由于有些文件存在错误&#xff0c;我想将这些错误文件修复&#xff0c;但在操作过程中&#xff0c;不知为什么所有的数据都被删除了。U盘文件修复应该怎么做呀&#xff1f;是不是我的操作方法有误呢&#xff1f;” U盘使用时间长了之后&#xff0c;很可能会…

【分布鲁棒、状态估计】分布式鲁棒优化电力系统状态估计研究[几种算法进行比较](Matlab代码实现)

&#x1f4a5;1 概述 文献来源&#xff1a; 摘要&#xff1a; 能源市场的自由化、可再生能源的渗透、先进的计量能力以及对情境感知的需求&#xff0c;都要求进行系统范围的电力系统状态估计&#xff08;PSSE&#xff09;。然而&#xff0c;由于互联的复杂性、实时监测中的通信…