jsp标签编程『续』---简单开发

   在jsp1.2之前如果想要对标签库进行开发,要么继承TagSupport类,要么继承BodyTagSupport类,而且必须覆写其中的doStartTag(),doAfterBody(),doEndTag()方法,而且还必须清楚这些方法的返回值类型;这样的过程太复杂了,到了JSP2.0后,简化标签的开发,专门增加了一个制作简单的标签库SimpleTagSupport类。直接覆写其中的doTag()方法即可;

SimpleTagSupport类的定义如下:

public class TagSupport extends Object implements SimpleTag

 此类实现了SimpleTag接口,SimpleTag接口如下:

public interface SimpleTag extends JspTag{
   public void doTag() throws JspException,IOException;
   public void setParent(JspTag parent);
   public JspTag getParent();
   public void setJspContext(JspContext pc);
   public void setJspBody(JspFragment jspBody);
}

  SimpleTagSupport类的主要方法:

No方法类型描述
1public void doTag() throws JspException,IOException普通完成具体标签功能的编写
2public JspContext getJspContext()普通取得JSP上下文,主要用于输出
3protected JspFragment getJspBody()普通取得JspFragment对象,主要用于迭代输出

SimpleDateTag:

package com.keith.tag;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

public class SimpleDateTag extends SimpleTagSupport {
	//接受格式化数据
	private String format;

	@Override
	public void doTag() throws JspException, IOException {
		//日期格式化
		SimpleDateFormat sdf = new SimpleDateFormat(this.format);
		try {
			//输出格式化后的日期
			super.getJspContext().getOut().write(sdf.format(new Date()));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public String getFormat() {
		return format;
	}

	public void setFormat(String format) {
		this.format = format;
	}

}

 simpledatetag.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>

	<short-name>simpledatetag</short-name>
	<tag>

 		<name>simpledate</name>

 		<tag-class>com.keith.tag.SimpleDateTag</tag-class>

 		<body-content>empty</body-content>
 		<attribute>

 			<name>format</name>

 			<required>true</required>

 			<rtexprvalue>true</rtexprvalue>
 		</attribute>
	</tag>
</taglib>

 index.jsp:

<%@ taglib prefix="simpledatetag" uri="simpledate"%>

  <body>
  	<simpledatetag:simpledate format="yyyy-MM-dd HH:mm:ss.SSS"/>
  </body>

 测试看下结果!

要是面对迭代问题呢?在以前,是通过TagSupport类实现的迭代操作,则可以通过控制返回值的方式,让程序循环执行doAfterBody()方法,但先在通过SimpleTagSupport类实现的doTag()方法,本身没有返回值,如果想达到循环的效果,就必须通过JspFragment类完成控制。

   在SimpleTagSupport类中存在一个getJspBody()方法,此方法返回的就是一个Fragment对象,利用此对象的invoke()方法即可完成标签体内容的输出;

SimpleIterateTag:

package com.keith.tag;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

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

public class SimpleIterateTag extends SimpleTagSupport {
	private String id;
	private String name;
	private String scope;

	@Override
	public void doTag() throws JspException, IOException {
		Object value = null;
		// 是否是page范围
		if ("page".equals(this.scope)) {
			value = super.getJspContext().getAttribute(name,
					PageContext.PAGE_SCOPE);
		} else if ("request".equals(this.scope)) {
			// 是否是request范围
			value = super.getJspContext().getAttribute(name,
					PageContext.REQUEST_SCOPE);
		} else if ("session".equals(this.scope)) {
			// 是否是session范围
			value = super.getJspContext().getAttribute(name,
					PageContext.SESSION_SCOPE);
		} else {
			// 是否是application范围
			value = super.getJspContext().getAttribute(name,
					PageContext.APPLICATION_SCOPE);
		}

		// 如果是List接口的实例
		if (value != null && value instanceof List<?>) {
			Iterator<?> iter = ((List<?>) value).iterator();
			while (iter.hasNext()) {
				super.getJspContext().setAttribute(id, iter.next());
				super.getJspBody().invoke(null);
			}
		}
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	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;
	}

}

 simpleiteratetag.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>
   
    <short-name>simpleiteratetag</short-name>
    <tag>

         <name>iterate</name>

         <tag-class>com.keith.tag.SimpleIterateTag</tag-class>
        <!--
        标签体内容,
            scriptless:表示标签体内容可以是文本,EL,JSP语法.不能包含JSP的脚本元素;
            empty:没有标签体;
            JSP:标签体可以包含文本,EL,或JSP标签,但是对于简单标签无效;
            tagdependent:表示标签体交由标签本身去解析处理,在标签体中的所有代码都会原封不动的交给标签处理器,而不是将执行结果传递给标签处理器;
        -->
         <body-content>scriptless</body-content>
         <attribute>

             <name>id</name>

             <required>true</required>

             <rtexprvalue>true</rtexprvalue>
         </attribute>

         <attribute>

             <name>name</name>

             <required>true</required>

             <rtexprvalue>true</rtexprvalue>
         </attribute>
        
         <attribute>

             <name>scope</name>

             <required>true</required>

             <rtexprvalue>true</rtexprvalue>
         </attribute>
    </tag>
</taglib>

 web.xml:

  <taglib>
  		<taglib-uri>simpleiterate</taglib-uri>
  		<taglib-location>/WEB-INF/simpleiteratetag.tld</taglib-location>
  </taglib>

 index.jsp:

<%@ taglib prefix="simpleiteratetag" uri="simpleiterate"%>

  <body>
	<%
		List<String> all = new ArrayList<String>();
		all.add("Java");
		all.add("C");
		all.add("Linux");
		request.setAttribute("all",all);
	 %>
	 <simpleiteratetag:iterate name="all" scope="request" id="names">
	 	${names }<br />
	 </simpleiteratetag:iterate>
  </body>

访问页面进行测试!

 DynamicAttributes接口:

每一个标签都可以定义属性,当使用一个标签时,只能编写指定个数及名称属性。在JSP2.0之后专门增加了一个DynamicAttribute接口,此接口的主要功能是用于完成动态属性的设置,即用户在使用一个标签时可以根据自己的需要,任意设置多个属性。

DynamicAttributes接口的定义如下:

public interface DynamicAttribute{
   public void setDynamicAttribute(String uri,String localName,Object value)throws JspException;
}

 在这个接口里,只定义了一个setDynamicAttribute()方法,在此方法中秩序关心localName(表示动态设置的属性名词)和value(动态设置的属性内容)这2个参数!

下面使用动态属性完成一个动态加法操作,用户可以直接在加法的标签中设置任意多个参数,并通过标签将计算的结果输出:

DynamicAddTag:

package com.keith.tag;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.DynamicAttributes;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class DynamicAddTag extends SimpleTagSupport implements DynamicAttributes{
	
	//实现动态属性接口
	private Map<String,Float> num = new HashMap<String,Float>();
	
	@Override
	public void doTag() throws JspException, IOException {
		//定义变量保存相加的结果
		Float sum = 0.0f;
		//迭代输出
		Iterator<Map.Entry<String,Float>> iter = this.num.entrySet().iterator();
		
		while (iter.hasNext()) {
			//取出每一个Map.Entry
			Map.Entry<String, Float> value = iter.next();
			//执行累加操作
			sum += value.getValue();
		}
		//输出计算的结果
		super.getJspContext().getOut().write(sum+"");
	}


	public void setDynamicAttribute(String uri, String localName, Object value)
			throws JspException {
		//取出设置的动态属性内容
		num.put(localName, Float.parseFloat(value.toString()));
	}

}

 dynamicaddtag.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>
	<short-name>dynamicadd</short-name>
	<tag>
 		<name>add</name>
 		<tag-class>com.keith.tag.DynamicAddTag</tag-class>
 		<body-content>empty</body-content>
 		<!-- 接受动态属性 -->
 		<dynamic-attributes>true</dynamic-attributes>
	</tag>
</taglib>

 web.xml:

    <taglib>
  		<taglib-uri>dynamicaddtest</taglib-uri>
  		<taglib-location>/WEB-INF/dynamicaddtag.tld</taglib-location>
  </taglib>

 index.jsp:

<%@ taglib prefix="dynamicadd" uri="dynamicaddtest"%>

  <body>
	计算结果:<dynamicadd:add num1="11.11" num2="10.12"  num3="12.1"/>
  </body>

 测试结果:计算结果:33.33

JSP简单标签入门与实践指南 本文还有配套的精品资源,点击获取 简介:JavaServer Pages (JSP) 简单标签是一种简单实用的自定义标签处理机制,适用于初学者。它允许将HTML或XML文档与Java代码结合,以创建动态网页。本指南将详细介绍JSP标签的概念、简单标签库的创建和使用,以及如何结合JSP EL表达式来处理数据。通过定义TLD文件、实现标签处理接口和编写 doTag() ... 阅读详情

相关推荐

sentinel——SLC数据下载、DEM数据下载拼接、精密轨道数据下载方法

Sentinel——SLC数据下载、DEM数据下载、精密轨道数据下载方法 SLC数据下载 网址:https://search.asf.alaska.edu DEM数据下载 1 手动下载 http://srtm.csi.cgiar.org/srtmdata/ 3.在SARscape中使用下载好的DEM 将下载好的DEM放在软件默认下载DEM路径下(默认路径是C:\Users<用户名&g...

u011322358的博客 2万+

[学习笔记]JSP自定义标签(3)

八、SimpleTagSupport类 在JSP2.0后,为了简化标签开发的难度,就可以使用SimpleTagSupport进行开发; 1.开发一般标签 注意点: (1)需要继承SimpleTagSupport类; (2)实现public void doTag()throws JspException,IOException; (3)super.getJspCo

[ 风少爷] 266

python设计俄罗斯方块(附源码)

【代码】python设计俄罗斯方块(附源码)

牧魂的博客 2059

Java Web基础入门第三十三讲 JSP技术——JSP简单标签开发

简单标签(SimpleTag)由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口来实现标签的功能。 实现SimpleTag接口的标签通常称为简单标签。简单标签共定义了5个方法: setJspContext方法 setParent和getParent方

李阿昀的博客 3418

从零构建:用Arduino和MCP2515模块搭建你的第一个CAN Bus网络

本文详细介绍了如何使用Arduino和MCP2515模块从零搭建CAN Bus网络,实现温湿度数据的传输与显示。涵盖硬件连接、软件配置、发送端与接收端代码实现,以及系统调试和进阶应用,帮助初学者快速掌握CAN总线通信技术。

d6e7f8的博客 833

基于STM32L4XX、HAL库的SIM65M定位模块驱动程序设计

SIM65M是一款基于4G LTE Cat.1的无线通信模块,支持最大下行速率10Mbps和上行速率5Mbps。它兼容多种网络协议(TCP/UDP/HTTP/HTTPS/FTP/MQTT等),适用于物联网应用。PC0 <---> PWRKEY (模块电源控制)PC1 <---> RESET (模块复位)支持LTE-FDD/LTE-TDD。工作电压:3.4V~4.2V。

zhusl6688的博客 196

JSP标签编程 1

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

tanyit的专栏 2388

MIKE 21 教程 2.2 Domain, Time, Module Selection设置教学

上一节讲解了水动力模型的基本概念与文件创建MIKE 21 教程 2.1水动力模型介绍​本节讲解水动力模型前三个模块的设置此模块需导入之前绘制好的网格文件,导入后可预览网格文件点击上方的Domain Specification可查看网格的数据统计与高程属性,快速检查网格文件有无明显错误 点击上方的Boundary names,可查看之前定义的出入水边界。在网格文件中,我们对边界只能以数字属性进行区分,这里可以对数字属性进行命名,在name中直接修改即可。本实例中我们的2代表入水边界,3代表出水边界。因为博主日

Hello Word 3866

JSP自定义标签就是如此简单

为什么要用到简单标签? 因此,为了简化标签开发的复杂度,在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口来实现标签的功能。。 一般来说,实现了SimpeTag接口的标签称之为简单标签 SimpleTag接口 首先我们来看一下它的源码吧: public interface SimpleTag extends JspTag { void doTag() ...

weixin_28695537的博客 911

Qt QCustomPlot 图形库详解及使用

QCustomPlot 是一个开源的 Qt C++ 库,专门用于创建数据图表。易于集成到 Qt 项目中。支持多种图表类型,如折线图、散点图、条形图等。提供丰富的交互功能,如缩放、平移、选择和拖动。高度可定制,支持图形的各种样式设置。// 添加第一条曲线i < 101;++i) {// 设置曲线颜色// 添加第二条曲线i < 101;++i) {// 设置曲线颜色// 设置散点样式// 添加图例。

MusicScore的博客 764

VMware Horizon 8 2111 部署系列(十一)准备RDS主机

RDS (Remote Desktop Service),即远程桌面服务。我们可以使用 Microsoft 远程桌面服务 (RDS) 提供 RDS 主机上的桌面会话并将应用程序传送给多个用户。

白昼的技术专栏 3470

JSP的标签技术

jsp的标签技术:在jsp页面中最好不要出现java代码,这时我们可以使用标签技术将java代码替换成标签来表示。JSP的标签技术主要有下面四种: jsp标签。 EL表达式。 JSTL标签库。 自定义标签技术。 一、jsp标签sun原生提供的标签,可以直接在jsp页面中使用。这种标签技术在实际使用中用的不是很多。它有很多标签,下面介绍其中的几种标签: 1、标签标签用于把另外一个资源的输出内容插入进当

wujingjing_crystal的专栏 7754

【Claude】API Error 通用错误:错误码含义与标准排查流程 bug报错已解决

Claude API 各类错误码速查与标准排查流程。

博客 8244

JSP简单标签带属性开发

1、开发带属性的标签,标签处理器类中属性要有相应setter方法,符合javaBean规范 2、tld文件中进行相应属性标签配置 属性配置相关说明如下图 3、简单标签带属性的例子 1)、通过设置标签属性,自定义循环标签体次数;基本数据类型,JSP页面传递字符串时可以自动转换成相应类型,复合数据类型就不能自动转换,如Date package TagDemo; i...

aa8102980的博客 202

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JSP2自定义标签(一)——简单标签

本文摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发》             在JSP规范的1.1版中增加自定义标签库规范,自定义标签库是一种非常优秀的表现层组件技术。通过使用自定义标签库,可以在简单的标签中封

虽然我很菜 1499

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JSP标签的简单使用

JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。 jsp的常用标签有以下三个: <jsp:include>标签 <jsp:param>标签 <jsp:forward>标签 1.<jsp:forward>标签 <jsp:forward page="WEB-INF/jsp/pageSecondT.jsp"...

ManonLiu 740

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

使用简单标签进行开发

简单标签执行的流程图     l  控制标签体的执行   1.标签处理器类 package com.jstl.simple.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.JspFragment; import ja

vaecherisher的专栏 883

JSP简单标签开发

一、继承自SimpleTag接口的自定义标签实现类称为简单标签,接口中5个方法 1、setJspContext方法   用于把JSP页面的PageContext对象传递给标签处理器对象 2、setParent方法   把父标签处理器对象传递给当前处理器对象 3、getParent方法   用于获取当前标签的父标签处理器对象 4、setJspBody方法   用于把代表标签...

aa8102980的博客 152

jsp----标签编程(JSTL)

jsp----标签编程(JSTL) 标签编程简介 JSP的开发是在HTML代码中嵌入了大量的Java代码,但是这样一来会使得JSP页面中充满了Java程序,修改或维护起来非常的不方便, 定义一个简单的标签----空标签 要想实现一个标签,可以直接继承javax.servlet.jsp.tagext.TagSupport类,如果要定义的标签内没有标签体,则直接覆...

qq_33717490的博客 253

JSP简单标签的开发

1. 新建RepeatSampleTag类,代码如下:package bid.zhazhapan.fims.tag;import java.io.IOException; import java.io.StringWriter; import javax.servlet.jsp.JspContext; import javax.servlet.jsp.JspException; import jav

渣渣潘的博客 6226

JSP自定义标签(4):开发jsp嵌套的标签

<br />开发嵌套的标签:haveChildTag   实际工程中往往需要多个标签来配合完成一定的功能,嵌套的标签存在父子关系,其中,父为外层标签,子为内层标签。本实例将用两个简单的标签来演示,父标签则作出逻辑判断,如果isOutput属性为true,则输出实例108中的标签helloTag;如果为false,则不输出。   (1)第一步:开发标签实现类。  内层的标签helloTag在实例108中已有,此处不再列出。  haveChildTag.java   package hello;   impor

nothingisgod的专栏 2197

Jsp开发常用标签总结

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1] 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操

fish9164的博客 1107

JSP标签库介绍

JSP标签库介绍    我用JSP和ASP编程已经有一段颇长的时间了,在这两种服务器端的编程解决方案中,我越来越觉得JSP的功能要比ASP强大得多。我为什么要把JSP选作首选服务器端web应用程序开发工具呢?当然,JSP迷人的特性和功能不少,但JSP的标签库是让我做出这一决定的最重要诱因之一。        为什么这样说呢?原因有两个方面:维护和开发的速度。服务器端脚本语言其实就像是开发Int

...... 1142

JSP标签

一,jsp标签语言特点 <开始标签 属性=“属性值”>标签体</结束标签> 例如: <c:out value="${name }">zs</c:out> 空标签 < br/ >< hr/ > <开始标签></结束标签> 比如下面的标签: <body></body> c标签是...

Make Excellence a Habit 420

使用JSTL开发jsp自定义标签开发

借助于jstl,我们可以方便的开发自定义标签,而不需要使用sun的jsp tag api本文以开发一个简单的if标签为例首先编写标签执行类,最重要的一点,继承javax.servlet.jsp.jstl.core.ConditionalTagSupport;代码简单的返回了true.大家可以加入自己的业务逻辑代码 package ttt;import javax.servl

我的世界我的梦 3107
上一篇: jsp标签编程『下』---开发迭代标签
下一篇: JSTL常用标签之大聚集---上
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值