JSP自定义标签【上】

news2024/11/17 11:43:45

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于自定义标签的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.什么是标签

二.什么是自定义标签

💡辉辉小贴士:我们已经知道了标签是什么,那么jsp标签的工作流程是怎样的呢?

三.为什么要使用自定义标签

四.怎么使用自定义标签➡自定义标签的步骤

1.建立一个标签助手类

2.建立一个tld文件【标签库描述文件】

3.页面上引用即可

💡辉辉小贴士:怎么样才知道自己精准掌握了呢?答案就是做个题目爽一爽

需求:自定义一个if标签,作用是如果判断的条件是true,那么就输出标签体的内容,否则不输出

五.自定义标签的生命周期 


一.什么是标签

在计算机领域中,标签(Tag)通常指的是一种元素标记语言(例如HTML)中用于标明内容类型的术语。通过在元素内部加上标签,可以告诉浏览器或其他程序如何显示或处理该元素中的内容。在Web浏览器中,通常使用标签来创建网页布局,插入图片、链接和其他媒体,以及定义页面的样式和交互行为。在WeTab新标签页中,标签可以理解为Web页面的一页,用于显示和处理一个特定的网站或Web应用程序

二.什么是自定义标签

        自定义标签(Custom Tags)是指在HTML或其他元素标记语言中自定义的标签。自定义标签是通过扩展标记语言的功能和语法,使开发者可以创建自己的标签来达到自己的定制化需求。这些自定义标签可以被用于网页布局、交互和数据呈现等方面。

        自定义标签可以帮助开发者更加高效地构建网页,因为它们可以代替一些常见的、重复的HTML代码。例如,如果你在网页中需要多次使用一个特定样式和交互的组件,你可以在HTML中创建一个自定义标签,然后在需要使用该组件的地方使用该标签。这样可以减少页面中的冗余HTML代码,同时也使得代码更加易于维护和扩展

💡辉辉小贴士:我们已经知道了标签是什么,那么jsp标签的工作流程是怎样的呢?

JSP标签的工作流程可以分为以下几个步骤

  •         1. 当JSP页面被请求时,Web容器会将该页面转换为Servlet并进行编译
  •         2. 在编译期间,Web容器会解析JSP页面中使用的标准标签库(例如JSTL和EL)以及自定义标签库(如果有的话),并生成对应的Java代码。这些Java代码可以用于在JSP页面中处理标签
  •         3. 在运行期间,当遇到标签时,Web容器会在相应的标签库中查找该标签的定义,并将标签解析为Java代码
  •         4. 在Java代码中,标签的处理类会被实例化和执行【通过反射机制】如果对反射机制感兴趣的话,可以点击链接,从而生成相应的输出文本。使用标签可省略很多JSP页面中的Java代码,使JSP页面变得更加简洁
  •         5. 最终,生成的输出文本会被写回到HTTP响应中,返回到客户端的浏览器上

三.为什么要使用自定义标签

        使用自定义标签可以带来以下几个好处:

  • 1. 重用代码:自定义标签可以将重复的代码封装起来,可以在多个页面中使用该标签,从而减少代码量,提高代码的重用性和可维护性。
  • 2. 提高可读性:自定义标签允许开发人员将业务逻辑和数据处理等操作放在标签中,消耗的代码量比纯Java代码要少,使代码更清晰更易于阅读和理解。
  • 3. 提高可扩展性:通过使用自定义标签,可以将应用逻辑模块化,在不改变前端视图的情况下,更加方便地处理逻辑改动。
  • 4. 提升开发效率:使用自定义标签不仅可以提高代码重用性和可扩展性,同时也可以加快开发速度,缩短项目开发周期。

⭐⭐总之,使用自定义标签可以使JSP页面更易于维护,在开发过程中提高开发效率,减少代码量,提高代码可读性和可维护性,使得项目更具有可扩展性和可重用性

四.怎么使用自定义标签➡自定义标签的步骤

        以out标签为例

1.建立一个标签助手类


       ① 继承BodyTagSuport
       ②定义标签中所需属性
       ③写好get,set方法
       ④按照自定义标签的规则写好dostarttag...

package com.wh.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class OutTag extends BodyTagSupport{
private String val;
private String Defaultval;

public String getVal() {
	return val;
}
public void setVal(String val) {
	this.val = val;
}
public String getDefaultval() {
	return Defaultval;
}
public void setDefaultval(String defaultval) {
	Defaultval = defaultval;
}


@Override
	public int doStartTag() throws JspException {
	//获取页面上下文对象
	 JspWriter out = this.pageContext.getOut();
	 try {
	if(val==null||val.equals("")) {
		
			out.print(this.Defaultval);
		}else {
			out.print(this.val);
		}
	 } catch (IOException e) {
			e.printStackTrace();
		}
		return SKIP_BODY;
	}

}

2.建立一个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-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<uri>wh</uri>

	<tag>
		<!-- 标签名字 -->
		<name>out</name>
		<!-- 标签助手类的全路径名 -->
		<tag-class>com.wh.tag.OutTag</tag-class>
		<!-- 标签体内容==是否是空【为空】 -->
		<body-content>empty</body-content>
		<!-- 属性 -->
		<attribute>
			<!-- 属性名 -->
			<name>val</name>
			<!-- 属性是否是必填的 -->
			<required>true</required>
			<!-- 属性值是否可以支持EL表达式 -->
			<rtexprvalue>true</rtexprvalue>
			<!-- 对out标签val属性作用的描述 -->
			<description>out标签val属性,用于输出val的值</description>
		</attribute>
		<!-- 属性 -->
		<attribute>
			<!-- 属性名 -->
			<name>defaultVal</name>
			<!-- 属性是否是必填的 -->
			<required>false</required>
			<!-- 属性值是否可以支持EL表达式 -->
			<rtexprvalue>false</rtexprvalue>
			<!-- 对out标签defaultVal属性作用的描述 -->
			<description>用于定义默认值</description>
		</attribute>
	</tag>
</taglib>

3.页面上引用即可

【 <%@taglib prefix="w" uri="wh" %> uri要与自定义标签库中的的一致】

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@taglib prefix="w" uri="wh" %>
<!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>使用自定义标签</title>
</head>
<body>
<!-- out标签 -->
 <w:out val="123"/> 
</body>
</html>

运行结果

💡辉辉小贴士:怎么样才知道自己精准掌握了呢?答案就是做个题目爽一爽

需求:自定义一个if标签,作用是如果判断的条件是true,那么就输出标签体的内容,否则不输出

标签助手类

package com.wh.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class IfTag extends BodyTagSupport {
	private boolean test;

	public boolean isTest() {
		return test;
	}

	public void setTest(boolean test) {
		this.test = test;
	}

	@Override
	public int doStartTag() throws JspException {
		if (this.test) {
			return EVAL_BODY_INCLUDE;// 如果结果为true,那么就输出标签体的内容
		}
		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-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<uri>wh</uri>

	
	<tag>
		<!-- 标签名字 -->
		<name>if</name>
		<!-- 标签助手类的全路径名 -->
		<tag-class>com.wh.tag.IfTag</tag-class>
		<!-- 标签体内容==是否是空【不为空】 -->
		<body-content>jsp</body-content>
		<!-- 属性 -->
		<attribute>
			<!-- 属性名 -->
			<name>test</name>
			<!-- 属性是否必填 -->
			<required>true</required>
			<!-- 属性是否支持EL表达式 -->
			<rtexprvalue>true</rtexprvalue>
			<!-- 对if标签属性作用的描述 -->
			<description>if标签</description>
		</attribute>
	</tag>
</taglib>

页面上引用

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@taglib prefix="w" uri="wh" %>
<!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>使用自定义标签</title>
</head>
<body>
<!--if标签  -->
<w:if test="${100 == 100}">
		结果为true,输出!!
	</w:if>
	
	<w:if test="${100 != 100}">
		结果为false,不输出!!
	</w:if>
</body>
</html>

运行结果

五.自定义标签的生命周期 

详解:

 返回值

方法返回值
方法返回值备注
SKIP_BODY跳过主体,不输出主体内容
EVAL_BODY_INCLUDE计算标签主体内容并输出
EVAL_PAGE计算页面的后续部分
SKIP_PAGE跳过页面的后续部分
EVAL_BODY_AGAIN再计算主体一次并输出

              好啦,今天的分享就到这了,希望能够帮到你呢!😊😊              

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

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

相关文章

国产骨传导耳机哪个牌子好,分享几款表现不错的国产骨传导耳机

骨传导耳机是一种新兴的耳机技术&#xff0c;其原理是将声音转化为不同频率的机械振动&#xff0c;通过人的颅骨、骨迷路、内耳淋巴液、螺旋器、听觉中枢来传递声波&#xff0c;不通过鼓膜&#xff0c;不入耳&#xff0c;不影响耳朵的听觉。听音乐是人们生活中不可缺少的一部分…

二叉树OJ题:LeetCode--965.单值二叉树

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下LeetCode中第965道二叉树OJ题&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; 数据结构与算法专栏&#xff1a;数据结构与算法 个 人…

python旅游推荐系统-计算机毕设 附源码82884

旅游推荐系统 摘 要 随着社会的快速发展和人们生活水平的不断提高&#xff0c;旅游已逐渐成为人们生活的重要组成部分&#xff0c;用户能够获取旅游信息的渠道也随信息技术的广泛应用而增加。大量未经过滤的信息在展示给用户的同时&#xff0c;也淹没了用户真正感兴趣的信息。为…

二十三种设计模式第十一篇--桥接模式

好久没写博客了&#xff0c;自从进入6月份&#xff0c;毕业季&#xff0c;全是在忙毕业的事情&#xff0c;都没怎么学习代码软件工程知识了&#xff0c;这二十三种设计模式还是得学完哈&#xff01;持之以恒&#xff0c;我本来为了学这二十三种设计模式的初衷是为了顺利度过软考…

Azkaban的安装教程

Azkaban的安装教程 文章目录 Azkaban的安装教程写在前面集群模式安装下载安装包上传 **tar** 包解压配置 **MySQL**配置 **Executor Server**编辑 azkaban.properties同步 azkaban-exec到所有节点启动 executor server激活 executor **配置** **Web Server**编辑 azkaban.prope…

短视频seo源码搭建技术分享

一、目录及主要文件说明 bootstrap目录&#xff0c;存放框架引导及启动文件&#xff0c;非底层改动&#xff0c;无需修改。其中的functions.inc中可以定义一些全局函数error目录&#xff0c;存放404、500等常见错误模板文件&#xff0c;非需勿动includes目录&#xff0c;drupal…

SpringBoot 如何使用 JProfiler 进行性能测试

SpringBoot 如何使用 JProfiler 进行性能测试 在 SpringBoot 应用程序中&#xff0c;我们可以使用 JProfiler 进行性能测试。JProfiler 是一款专业的 Java 性能分析工具&#xff0c;可以帮助我们识别和解决应用程序的性能问题。使用 JProfiler 可以让我们更加准确地测试代码的…

C语言进阶教程(字符串深入)

文章目录 前言一、字符数组赋值注意事项二、混淆点三、字符串字面量和字符数组的区别四、字符串长度总结 前言 其实在C语言中是没有真正的字符串的&#xff0c;在C语言中字符串都是使用字符数组来完成的。 一、字符数组赋值注意事项 在C语言中&#xff0c;字符数组&#xff…

[RocketMQ] Producer生产者启动源码 (五)

DefaultMQProducer的关系图: 文章目录 1.创建DefaultMQProducer实例2.start启动生产者2.1 getOrCreateMQClientInstance获取或者创建MQClientInstance2.2 registerProducer注册生产者2.3 start启动MQClientInstance2.4 startScheduledTask启动各种定时任务2.4.1 updateTopicRou…

【Linux】切换内核版本(Centos)

1.查看服务器已安装的所有内核版本 awk -F\ $1"menuentry " {print i " : " $2} /etc/grub2.cfg0 : CentOS Linux (3.10.0-1160.83.1.el7.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1160.80.1.el7.x86_64) 7 (Core) 2 : CentOS Linux (3.10.0-1127.el7.…

求最小函数依赖集(例题讲解)超详细,易理解

在关系R<U,F>中&#xff0c;UABCDEG F{BG->C&#xff0c;BD->E,DG->C,ADG->BC,AG->B,B->D} 先进行第一大步&#xff1a; 先看右边&#xff1a; 如果有BG->C,G-->C,因为单G就可以推出C了就不需要BG--->C了&#xff0c;可以把BG--->C这个…

Segment Anything Model(SAM)

Segment Anything Model&#xff08;SAM&#xff09;是Facebook Research近来开源的一种新的图像分割任务、模型。Segment Anything Model&#xff08;SAM&#xff09;可以从输入提示&#xff08;如点或框&#xff09;生成高质量的对象掩模&#xff0c;并可用于生成图像中所有对…

1、一条 SQL 查询语句是如何执行的?

基础篇 第一课、一条 SQL 查询语句是如何执行的&#xff1f; 下面是 MySQL 的基本架构示意图&#xff0c;从中可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。 大体来说&#xff0c;MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存…

AI近十年盘点:纵览AI发展历程,探寻AI未来走向

编者按&#xff1a;当我们回顾过去十年的人工智能发展历程时&#xff0c;可以看到一场现在还正在进行的变革&#xff0c;对我们的工作方式、商业运营模式和人际交往行为都产生了深远的影响。从2013年的AlexNet到变分自编码器&#xff0c;再到最近的生成式大模型&#xff0c;人工…

Vue 2 - 常见面试题汇总大全

文章目录 一 基础知识1.vue 的生命周期1-1 钩子函数1-2 钩子函数的使用方法1-3 父子组件生命周期构造函数执行顺序 2 v-show 与 v-if v-for2-1.v-show 与 v-if 的区别2-2 v-if 和v-for的优先级 3.组件通信有哪些方式&#xff1f;4 computed和watch &#xff0c;有什么区别4-1.c…

西门子S7-1200定时器

一、西门子S7-1200定时器介绍 S7-1200的定时器为IEC定时器&#xff0c;用户程序中可以使用的定时器数量仅仅受CPU的存储器容量限制。 使用定时器需要使用定时器相关的背景数据块或者数据类型为IEC_TIMER&#xff08;或TP_TIME、TON_TIME、TOF_TIME、TONR_TIME&#xff09;的D…

别再弄混流程挖掘、BPM和BI

信息时代以来&#xff0c;各类信息系统不仅在企业中得到了广泛的应用和普及&#xff0c;种类和选择伴随全球数字技术的发展也逐渐变得丰富多样。而随着数字化转型的不断深入&#xff0c;企业对系统管理的需求面临着全新的变化。 如何配置最适合当下业务的系统&#xff1f;这个…

Axure教程——图片轮播(纵向滚动)

本文介绍的时用Axure中的动态面板制作图片轮播之纵向滚动 一、预览效果 预览地址&#xff1a;https://c1s4i1.axshare.com 二、功能描述 图片纵向自动滚动播放 三、元件制作 拖入一个动态面板&#xff0c;命名为1&#xff0c;设置大小为375*155&#xff0c;并设置四个状态&…

文科生从0学Python转数据分析学习建议避坑指南

我本科是财务管理&#xff0c;文科专业&#xff0c;零基础学习Python转行数分后&#xff0c;现在我的日常工作都离不开它。 接下来&#xff0c;给各位跟我一样无编程经验的朋友一些学习的建议 目标导向&#xff1a;先搞清楚为啥要学 Python几乎可以做任何事&#xff0c;但我…

2023汽车供应链大会暨爱普搜采购商交流会

2023汽车供应链大会暨爱普搜采购商交流会 Automotive Supply Chain Conference & APSOTO Purchasing Exchange Meeting 补链强链 绿色发展--打造中国汽车供应链新生态 北京是我国汽车工业重地之一&#xff0c;产业实力雄厚&#xff0c;发展强劲。北京车企及零部件公司分布…