jsp标签编程『下』---TagSupport类

掌握基本的标签定义后,可以发现定义标签时都需要继承TagSupport这个类,TagSupport类是整个标签编程的一个核心类,此类定义如下:

public class TagSupport extends Objet implements IterationTag,Serizlizable

 它同时实现了IteratorTag和Serializable两个接口,IterationTag接口的定义如下:

public interface IterationTag extends Tag{
   public static final int EVAL_BODY_AGAIN;
   public int doAfterBody() throws JspException;
}

 IterationTag本身又是Tag接口的子接口,Tag接口定义如下:

public interface Tag extends JspTag{
   public static final int SKIP_BODY;
   public static final int EVAL_BODY_INCLUDE;
   public static final int SKIP_PAGE;
   public static final int EVAL_PAGE;
   public void setPageContext(PageContext pc);
   public void setParent(Tag t);
   public Tag getParent();
   public int doStartTag() throws JspException;
   public int doEndTag() throws JspException;
   public void release();
}

 TagSupport类中定义的常量及方法:

No常量及方法类型描述
1protected PageContext pageContext属性表示pageContext对象,可以操作4种属性范围
2public static final int SKIP_BODY常量忽略标签体内容,将操作转交给doEndTag()
3public static final int EVAL_BODY_INCLUDE常量正常执行标签体操作,但不处理任何运算
4public static final int SKIP_PAGE常量所在在JSP上的操作走将停止,会将所有输出的内容立刻显示在浏览器上
5public static final int EVAL_PAGE常量

正常执行JSP页面

6public static final int EVAL_BODY_AGAIN常量重复执行标签体内容,会再次调用doAfterBody(),直到出现SKIP_BODY为止
7public int doStartTag() throws JspException方法处理标签开始部分
8public int doEndTag() throws JspException方法处理标签结束部分
9public int doAfterBody() throws JspException方法处理标签主体部分
10public viod release()方法释放标签资源

 

doStartTag():此方法忽略标签开始时执行,返回值如下:

  • SKIP_BODY:表示忽略标签体的内容,而将执行权转交给doEndTag()方法;
  • EVAL_BODY_INCLUDE:表示执行标签体的内容;

doAfterBody():此方法是IterationTag接口于Tag接口的区别所在,用来重复执行标签体的内容,返回治如下:

  • SKIP_BODY:表示标签体内容会被忽略,并且将执行权交给doEndTag()方法;
  • EVAL_BODY_AGAIN:表示重复执行标签体的内容,会重复调用doAfterBody()方法,一直循环下去,直到doAfterBody()方法返回SKIP_BODY为止;

doEndTag():此方法在标签结束时执行,返回值如下:

  • SKIP_PAGE:表示jsp页面立刻停止执行,并将所有的输出立刻回传到浏览器上;
  • EVAL_PAGE:表示JSP可以正常地运行完毕;

release():将标签处理类所产生或是获得的资源全部释放,并等待用户下次继续使用;

 

实现一个有标签体的标签库:

演示一个包含方法体标签的开发,主要完成:判断在某一属性中是否存在指定的属性,如果存在,则进行输出。

AttributeTag:

package com.keith.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.TagSupport;

public class AttributeTag extends TagSupport {
	//接受属性名称
	private String name;
	//接受查找范围
	private String scope;

	@Override
	public int doStartTag() throws JspException {
		Object value = null;
		//是否是page范围
		if ("page".equals(this.scope)) {
			value = super.pageContext
					.getAttribute(name, PageContext.PAGE_SCOPE);
		} else if ("request".equals(this.scope)) {
			//是否是request范围
			value = super.pageContext.getAttribute(name,
					PageContext.REQUEST_SCOPE);
		} else if ("session".equals(this.scope)) {
			//是否是session范围
			value = super.pageContext.getAttribute(name,
					PageContext.SESSION_SCOPE);
		} else {
			//是否是application范围
			value = super.pageContext.getAttribute(name,
					PageContext.APPLICATION_SCOPE);
		}
		//如果没有查到属性
		if (value ==null) {
			//不执行标签体内容
			return TagSupport.SKIP_BODY;
		}else{
			//找到属性,执行标签题内容
			return TagSupport.EVAL_BODY_INCLUDE;
		}
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getScope() {
		return scope;
	}

	public void setScope(String scope) {
		this.scope = scope;
	}
}

 attributetag.tld:

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    <!-- 标签库的版本 -->
	<tlib-version>1.0</tlib-version>
	<!-- 为标签苦在TLD中的描述名称 -->
	<short-name>attributetag</short-name>
	<tag>
	<!-- 表示标签在JSP中的使用名称 -->
 		<name>present</name>
 		<!-- 表示这个标签所这项的Class -->
 		<tag-class>com.keith.tag.AttributeTag</tag-class>
		<!-- 标签体内容为空 -->
 		<body-content>JSP</body-content>
 		<attribute>
 		<!-- format为属性名 -->
 			<name>name</name>
 			<!-- 表示此值必须设置 -->
 			<required>true</required>
 			<!-- 表示属性值是请求时表达式的结果 -->
 			<rtexprvalue>true</rtexprvalue>
 		</attribute>

 		<attribute>
 		<!-- format为属性名 -->
 			<name>scope</name>
 			<!-- 表示此值必须设置 -->
 			<required>true</required>
 			<!-- 表示属性值是请求时表达式的结果 -->
 			<rtexprvalue>true</rtexprvalue>
 		</attribute>
	</tag>
</taglib>

 web.xml:

    <taglib>
  		<taglib-uri>attribute</taglib-uri>
  		<taglib-location>/WEB-INF/attributetag.tld</taglib-location>
  </taglib>

 index.jsp:

<%@ taglib prefix="attributetag" uri="attribute"%>

  <body>
  	<hr />
  	<%
  		String scope = "session";
  		session.setAttribute("name","keith");
  	 %>
  	 
  	 <attributetag:present name="name" scope="<%=scope %>">
  	 	<%=scope %>范围内存在:"${sessionScope.name }"
  	 </attributetag:present>
  </body>
 

 

掌握JSP Tag接口:自定义标签开发详解 JSP技术作为Java EE平台的组成部分,为Web开发提供了便利。通过JSP Tag接口,开发者能够创建可复用的组件,以简化Web页面的开发和维护。Tag接口和它的子接口定义了标签的生命周期,使开发者能够控制标签在JSP页面中的行为。在上一章中,我们探讨了JSP Tag接口的基础知识和其重要性。在这一章中,我们将深入了解标签库的定义及其在JSP页面中的使用方法。通过本章内容的学习,你将掌握如何定义和配置标签库,以及如何将这些标签库应用于实际项目中,从而提高代码的可重用性和项目的维护性。 阅读详情

相关推荐

麒麟V10等保三级配置实战:从auditd规则到PAM锁定的可信基线构建

Linux安全基线是信息系统可信运行的基础能力,其核心在于身份鉴别、访问控制与安全审计三大机制的协同落地。在国产化信创环境中,麒麟V10作为深度适配飞腾/鲲鹏平台的操作系统,其等保三级合规并非简单套用CentOS加固脚本,而是需围绕内核审计(auditd)、可插拔认证模块(PAM)及国产安全增强机制(如kysec)进行精细化编排。技术价值体现在将抽象条款(如GB/T 22239-2019中6.1.2、6.3.3条)转化为可验证的命令行操作,确保登录失败可锁定、关键行为可追溯、时间偏差不致日志失效。典型应用场

weixin_29969209的博客 596

自定义标签tag

一、基本概念:  1.标签(Tag): 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的  2.标签库(Tag library): 由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库。  3.标签库描述文件(Tag Library D

yuannauy的专栏 5239

MT6826SGT-STD-R绝对值编码器深度解析:精准控制+灵活编程

本文详细介绍MT品牌的高性能绝对值编码器——MT6826SGT-STD-R。:区别于传统增量式编码器,绝对值输出无需掉电归零,开机即获准确位置数据。的核心优势,结合应用场景与选型指南,为工程师提供一站式解决方案参考。MT6826SGT-STD-R是一款专为工业级精密控制设计的。该设备广泛应用于伺服系统、机器人关节校准、自动化产线等领域。:15bit分辨率实现细腻的位置反馈;:通过专用编写器可自定义多项关键参数;:优化电路设计,适应复杂电磁环境。

2501_93066786的博客 678

JSP自定义标签方式二(TagSupport)

1.实现类 创建自己的类并继承javax.servlet.jsp.tagext.TagSupport 2.流程介绍 TagSupport的流程主要分为三个方法 doStartTag()----标签开始的处理方法 doAfterBody()----标签体处理后的方法 doEndTag()----标签结束时的处理方法 其中: ①doStartTag()可以返回 SKIP_BODY 和 EVAL_BO...

m1015331236的博客 605

别再死记硬背了!用LTspice和Simulink仿真,5分钟搞懂巴特沃斯、切比雪夫、贝塞尔滤波器的区别

本文通过LTspice和Simulink仿真工具,直观对比了巴特沃斯、切比雪夫和贝塞尔滤波器的特性差异。从通带波纹、过渡带陡峭度到相位线性度,详细解析了三种经典滤波器的设计哲学与应用场景,帮助工程师和学生快速掌握滤波器选型技巧,提升电路设计效率。

weixin_33910191的博客 523

开关电源EMC整改案例-辐射骚扰

2.4.1 获得原始数据。同样的分析可以应用在差模电流的情况, 唯一不同的是, 两根导线的磁场分布是相反的, 磁 场互相抵消, 由于导线中的电流大小相等, 产生的磁场 H 大小相同, 在互相靠近的情况下, 在磁 环内的两个感应磁场大小相同、方向相反, 因此合成之后的感应磁场 B 几乎为 0,对任意一根导 线而言,相当于是一段“无感导线”,对差模电流不会产生任何抑制作用。众所周知, 共模电感的匝数越多, 感量越大, 按道 理来说对共模干扰电流的抑制也会越强烈,对抗辐射 也越有利,然而事实真的如此吗?

经营范围: CTA、SRRC、CCC、移动、电信、联通入库 3496

jsp自定义标签--tagSupport和bodyTagSupport

首先,我们从下图先了解标签tagSupport和bodyTagSupport的关系。 由图我们可以看出,bodyTagSupport是继承tagSupport的,因此,我们可以知道bodyTagSupport的功能会比较的多。用TagSupport实现的标签,都可以用BodyTagSupport来实现。 TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与

紫叶溪~~ 733

ARC学习(6)arc 编译器overlap 地址重叠方式使用

摘要:本文介绍了ARC编译器中使用overlap地址重叠的方法。

张一西的博客 718

java 自定义标签继承_JSP继承TagSupport如何开发带属性的自定义标签

JSP继承TagSupport如何开发带属性的自定义标签Taglib的无属性自定义标签不能满足我们,如果可以在标签从加入我们需要的属性那么这样的话会更发方便了,可以根据我需要的什么参数直接传到指定的类展现我需要的内容。Taglib开发自定义属性标签步骤如下:1. 导入java包import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;...

weixin_32891615的博客 345

高斯过程的数学理解

G澳大利亚的过程是有益的,特别是当我们有少量数据时。当我在制造业担任数据科学家时,我们的团队使用这种算法来揭示我们接下来应该进行哪些实验条件。但是,此算法不如其他算法流行。在这篇博客中,我将通过可视化和 Python 实现来解释高斯过程 [1] 的数学背景。

gongdiwudu的专栏 3610

OceanBase数据库LSM-Tree存储引擎深度解析:合并写入与压缩优化策略

OceanBase数据库采用创新的LSM-Tree架构设计,通过"基线-增量"分离存储实现高性能。内存中的MemTable处理写入,磁盘上的SSTable存储有序数据,利用多级缓存加速读取。写入时先写日志再更新内存,合并操作将增量数据整合为基线数据以优化查询性能。相比传统B+树引擎,OceanBase在写入吞吐、压缩效率和存储成本方面优势显著,特别适合写入密集型场景。合并操作作为核心机制,通过多种触发方式和执行策略平衡性能与资源消耗。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1342

JSP自定义标签(1)

一、引入标签 其实在JSP中我们已经使用过了几个标签,比如、等;这些标签都是预先定义好的,如果我们需要自定义标签,就需要学习标签编程。 标签编程的优点就是灵活性+封装性。 灵活性体现在属性的赋值上,可以赋任意值。比如   //A处可以赋任意的URL; 封装性体现在内部的行为的封装,因为标签是用一个类实现的,因此类的方法中能够包含任意复杂的动作。 因此标签是为了能够在JSP中使用尽

xiazdong 5133

AI上推荐 之 协同过滤

㐇

Miracle8070 1万+

JSP标签编程 2

本章目标 JSP标签编程     定义有属性的标签 本章目标 理解标签中熟悉的设置方法 理解标签配置文件中的属性定义格式         上面已经清楚的知道了,对于一个标签的开发需要标签的支持了,标签库的描述文件、web.xml文件中进行配置、之后在JSP中进行使用          但是对于属性:,  现在自己的标签也可以定义属性操作

tanyit的专栏 1085

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

创建JSP自定义标签

在JSP编程中,Struts一般用来处理form和业务逻辑,Struts中使用了很多自定义标签,如html、bean等,但很多时候我们还是需要使用 "" 这样的语句来操作一些输出。为了减少这种代码,可以创建自定义标签。 一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负责jsp页面和你编写的类之间的

long_ge_cool的专栏 593

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

嵌套标签的问题

我在做标签的时候发现有时候嵌套标签在jsp显示的时候非常重要. 特地拿来和大家一起分享. 我以开发一个 switch 标签为例. 1,首先要写三个标签类. package com.cao.tag; import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.TagSupport; public clas...

weixin_30511107的博客 71

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JSP自定义标签继承哪个类

JSP自定义标签继承哪个类解:JSP自定义标签继承TagSupport

游海东的技术专栏 3194

JSP标签编程(章节摘要)

1,标签编程可以让一个JSP页面完全摆脱掉Script的困扰,使开发的JSP页面更加美观。 2,要想实现标签,需要编写标签处理类,标签描述文件,如果需要可以在web.xml中进行标签库的配置。 3,在JSP中要想使用标签,可以通过“”完成导入,通过prefix指定一个标记,通过URI指定tld的文件路径,或者是通过web.xml配置映射路径。 4,标签处理类可以通过继

chen516067656的专栏 409

jsp自定义标签

一、基本概念 1、标签(Tag) 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的。 2、标签库(Tag library) 由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库。 3、标签库描述文件(Tag Library Descriptor) 标签库描...

weixin_30502965的博客 91

自定义jstl标签

原文链接:https://blog.youkuaiyun.com/qq_40369435/article/details/81081697 第三章我们遇见了一个JSP标签,为了让接下来的学习能更清晰地认识标签,故做了以下hello.jsp中的hello标签与web.xml标签中的<taglib>元素,mytaglib.tld文件中的<tag>元素,以及HelloTag.class文件...

qq_39666711的博客 62

第九章自定义标签第一节概念

1.标签(Tag): 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护。 由于标签是XML元素,所以它的名称和属性都是大小写敏感的2.标签库(Tag library): 由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库。3.标签库描述文件(Tag Library Descriptor):(.tld) 标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP

please 257

Jsp中的自定义标签(TagSupport)的详解

一、基本概念: 1.标签(Tag): 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的 2.标签库(Tag library): 由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库。 3.标签库描述文件(Tag Li...

zuoying的专栏 1512

JSP标签编程 1

JSP标签编程  1     标签编程在实际开发之中,并不是很常见,就是说自己开发标签的情况基本上是不存在的,因为这个与开发的环境所限制,因为自己开发之后的标签基本上没有任何的通用性,所以在实际中基本上都是大量的使用已经开发好的标签,例如:之后讲解的JSTL或者是Struts 中都有标签 之所以在这类讲解标签的开发,注意目的是帮助大家建立一个完整的知识体系 本程序中的Scriptlet代

tanyit的专栏 2388

jsp标签

一、JSP标签基本概念: 1.标签(Tag): 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现 同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的 2.标签库(Tag library): 由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库。 3.标签库描述文件(Tag Library De

a1304317638的专栏 2198

JSP自定义标签中,BodyTagSupport和TagSupport的区别

BodyTagSupport和TagSupport的关系:BodyTagSupport是继承TagSupport的,因此,我们可以知道BodyTagSupport的功能会比较的多。BodyTagSupport和TagSupport的区别主要是:标签处理类是否需要与标签体交互。不需要交互的就用TagSupport,需要交互就用BodyTagSupport。交互就是标签处理类是否要读取标签体的内容和改...

qq_42246139的博客 636
上一篇: jsp标签编程『中』---定义有属性的标签
下一篇: jsp标签编程『下』---开发迭代标签
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值