JSP自定义标签 实例

定义最简单的标签
自定义标签采用Default Adapter模式(缺省适配模式)

 

Java代码

  1. //最简单的标签   
  2. public class LangHuaTag extends TagSupport {   
  3.     private long startTime;   
  4.     private long endTime;   
  5.        
  6.     public int doStartTag() throws JspException {   
  7.          startTime = System.currentTimeMillis();   
  8.         //表示定制标记里面有所包括的JSP页面   
  9.         return TagSupport.EVAL_BODY_INCLUDE;   
  10.      }   
  11.     public int doEndTag() throws JspException {   
  12.          endTime = System.currentTimeMillis();   
  13.         long elapsed = endTime - startTime;        
  14.         try {   
  15.              JspWriter out = pageContext.getOut();   
  16.              out.println("runtime is "+ elapsed);   
  17.          } catch (IOException e) {   
  18.              e.printStackTrace();   
  19.          }   
  20.         //表示JSP页面继续运行   
  21.         return TagSupport.EVAL_PAGE;   
  22.      }   
  23.        
  24. }   
  25. //代属性的标签   
  26. public class DateTag extends TagSupport {   
  27.     private String pattern = "yyyy-MM-dd hh:mm:ss";   
  28.     private Date date;   
  29.     //必须要有Set方法,因为是属性可以设值   
  30.     public void setPattern(String pattern) {   
  31.         this.pattern = pattern;   
  32.      }   
  33.        
  34.     public void setDate(Date date) {   
  35.         this.date = date;   
  36.      }   
  37.   
  38.     public int doEndTag() throws JspException {   
  39.          SimpleDateFormat sdf = new SimpleDateFormat(pattern);   
  40.         //如果没有就是当前时间   
  41.         if(date==null){   
  42.              date = new Date();   
  43.          }          
  44.          JspWriter out = pageContext.getOut();   
  45.         try {   
  46.              out.print(sdf.format(date));   
  47.          } catch (IOException e) {   
  48.              e.printStackTrace();   
  49.          }   
  50.         return TagSupport.EVAL_PAGE;   
  51.      }   
  52. }   
  53.   
  54. /**
  55. * 循环输出
  56. * @author Administrator
  57. *
  58. */  
  59. public class LoopTag extends TagSupport {   
  60.     private int times =0;   
  61.     //Set方法设值   
  62.     public void setTimes(int times) {   
  63.         this.times = times;   
  64.      }   
  65.        
  66.     public int doStartTag() throws JspException {   
  67.         //表示定制标记里面有所包括的JSP页面   
  68.         return TagSupport.EVAL_BODY_INCLUDE;   
  69.      }   
  70.        
  71.     public int doAfterBody() throws JspException {   
  72.         if(times>0){   
  73.              times--;   
  74.             //表示双从标签开始输入   
  75.             return TagSupport.EVAL_BODY_AGAIN;   
  76.          }      
  77.         //表示结束,忽略标签内部的内容   
  78.         return TagSupport.SKIP_BODY;   
  79.      }   
  80.        
  81. }  
//最简单的标签
public class LangHuaTag extends TagSupport {
 private long startTime;
 private long endTime;
 
 public int doStartTag() throws JspException {
  startTime = System.currentTimeMillis();
  //表示定制标记里面有所包括的JSP页面
  return TagSupport.EVAL_BODY_INCLUDE;
 }
 public int doEndTag() throws JspException {
  endTime = System.currentTimeMillis();
  long elapsed = endTime - startTime;  
  try {
   JspWriter out = pageContext.getOut();
   out.println("runtime is "+ elapsed);
  } catch (IOException e) {
   e.printStackTrace();
  }
  //表示JSP页面继续运行
  return TagSupport.EVAL_PAGE;
 }
 
}
//代属性的标签
public class DateTag extends TagSupport {
 private String pattern = "yyyy-MM-dd hh:mm:ss";
 private Date date;
 //必须要有Set方法,因为是属性可以设值
 public void setPattern(String pattern) {
  this.pattern = pattern;
 }
 
 public void setDate(Date date) {
  this.date = date;
 }

 public int doEndTag() throws JspException {
  SimpleDateFormat sdf = new SimpleDateFormat(pattern);
  //如果没有就是当前时间
  if(date==null){
   date = new Date();
  }  
  JspWriter out = pageContext.getOut();
  try {
   out.print(sdf.format(date));
  } catch (IOException e) {
   e.printStackTrace();
  }
  return TagSupport.EVAL_PAGE;
 }
}

/**
 * 循环输出
 * @author Administrator
 *
 */
public class LoopTag extends TagSupport {
 private int times =0;
 //Set方法设值
 public void setTimes(int times) {
  this.times = times;
 }
 
 public int doStartTag() throws JspException {
  //表示定制标记里面有所包括的JSP页面
  return TagSupport.EVAL_BODY_INCLUDE;
 }
 
 public int doAfterBody() throws JspException {
  if(times>0){
   times--;
   //表示双从标签开始输入
   return TagSupport.EVAL_BODY_AGAIN;
  } 
  //表示结束,忽略标签内部的内容
  return TagSupport.SKIP_BODY;
 }
 
}



配置文件
Xml代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <taglib xmlns="http://java.sun.com/xml/ns/j2ee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"  
  5.     version="2.0">  
  6.     <tlib-version>1.0</tlib-version>  
  7.     <short-name>util</short-name>  
  8.     <uri>http://langhua.com/taglib/util</uri>  
  9.     <tag>  
  10.         <name>timer</name>  
  11.         <tag-class>com.langhua.tagsupport.LangHuaTag</tag-class>  
  12.         <body-content>JSP</body-content>  
  13.         <!-- JSP,empty表示能能包函内容的,scriptless,tagdependent -->  
  14.     </tag>  
  15.        
  16.     <tag>  
  17.         <name>date</name>  
  18.         <tag-class>com.langhua.tagsupport.DateTag</tag-class>  
  19.         <body-content>empty</body-content>         
  20.         <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->  
  21.         <attribute>  
  22.             <!-- 标签名 -->  
  23.             <name>time</name>  
  24.             <!-- 是否为可选属性 -->  
  25.             <required>false</required>  
  26.             <!-- 是否接受JSP表达示计算结果 -->  
  27.             <rtexprvalue>true</rtexprvalue>  
  28.         </attribute>  
  29.         <attribute>  
  30.             <name>pattern</name>  
  31.             <required>true</required>  
  32.             <rtexprvalue>false</rtexprvalue>  
  33.         </attribute>  
  34.     </tag>  
  35.        
  36.     <tag>  
  37.         <name>loop</name>  
  38.         <tag-class>com.langhua.tagsupport.LoopTag</tag-class>  
  39.         <body-content>JSP</body-content>           
  40.         <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->  
  41.         <attribute>  
  42.             <!-- 标签名 -->  
  43.             <name>times</name>  
  44.             <!-- 是否为可选属性 -->  
  45.             <required>true</required>  
  46.             <!-- 是否接受JSP表达示计算结果 -->  
  47.             <rtexprvalue>true</rtexprvalue>  
  48.         </attribute>         
  49.     </tag>  
  50. </taglib>  
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <tlib-version>1.0</tlib-version>
    <short-name>util</short-name>
    <uri>http://langhua.com/taglib/util</uri>
    <tag>
        <name>timer</name>
  <tag-class>com.langhua.tagsupport.LangHuaTag</tag-class>
  <body-content>JSP</body-content>
  <!-- JSP,empty表示能能包函内容的,scriptless,tagdependent -->
    </tag>
    
    <tag>
        <name>date</name>
  <tag-class>com.langhua.tagsupport.DateTag</tag-class>
  <body-content>empty</body-content>  
  <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->
  <attribute>
   <!-- 标签名 -->
   <name>time</name>
   <!-- 是否为可选属性 -->
   <required>false</required>
   <!-- 是否接受JSP表达示计算结果 -->
   <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
   <name>pattern</name>
   <required>true</required>
   <rtexprvalue>false</rtexprvalue>
  </attribute>
    </tag>
    
    <tag>
        <name>loop</name>
  <tag-class>com.langhua.tagsupport.LoopTag</tag-class>
  <body-content>JSP</body-content>  
  <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->
  <attribute>
   <!-- 标签名 -->
   <name>times</name>
   <!-- 是否为可选属性 -->
   <required>true</required>
   <!-- 是否接受JSP表达示计算结果 -->
   <rtexprvalue>true</rtexprvalue>
  </attribute>  
    </tag>
</taglib>


JSP页面
Html代码
  1. <%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>  
  2.   
  3. <util:timer></util:timer>  
  4. <util:loop times="3">  
  5.     <util:date pattern="yyyy-MM-dd" /><br/>  
  6. </util:loop>  
<%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>

<util:timer></util:timer>
<util:loop times="3">
   <util:date pattern="yyyy-MM-dd" /><br/>
</util:loop>

TagSupport的流程图

EVAL_BODY_INCLUDE 处理标记内容,并把这些内容写到输出流中doStartTag()
SKIP_BODY 不处理标记内容doStartTag(),doAfterBody()
EVAL_BODY_AGAIN 又重头处理doAfterBody()
EVAL_PAGE 继续执行JSP里面的代码 doEndTag()
SKIP_PAGE 不继续执行JSP里面的代码 doEndTag()

RAGFlow 系列教程 第三课:后端服务入口与请求生命周期 本文深入解析RAGFlow v0.25.0后端核心机制,重点介绍了Quart框架选型原因和服务启动流程。RAGFlow选择Quart作为Web框架,主要基于其异步能力对LLM调用的支持、Flask生态兼容性以及长响应超时处理优势。文章详细拆解了服务启动的8个关键步骤,从日志初始化到HTTP服务启动,并分析了配置加载、数据库初始化等核心环节。通过源码分析揭示了RAGFlow如何实现动态API注册、双重认证体系等关键技术点,为深入理解该系统的请求处理生命周期提供了基础。 阅读详情

相关推荐

[记录一个bug]av_hwdevice_ctx_create出现Cannot allocate memory(附带库运行时路径)[已解决]

新写的程序里调用ffmpeg的av_hwdevice_ctx_create()这个函数,出现Cannot allocate memory。但是另个程序一样的代码,居然是成功的。 反复检查之后无果,就跳出去查了一下,看到一个问答: Have you tried to use ffmpg executables with the same libs that you using when you run the app? Have you tried to use ffmpg executables

熊猫Ben的博客 3588

自定义标签的使用jsp实例_JSP自定义标签示例教程

自定义标签的使用jsp实例Today we will look into JSP custom tags. Earlier we learned about JSP Action Elements, JSP EL and JSTL to avoid scripting elements in JSP pages. But sometimes even these are not enough an...

从零开始的教程世界 378

JSP:自定义标签——开发实例

ize和fontColor,fontSize用于设置字体大小,fontColor用于设置文字的颜色。   (1)第一步:开发标签实现类。   helloTagHaveProp.java   package hello;   import javax.servlet.jsp.JspWriter;   import javax.servlet.jsp.tagext.TagSupport;   public class helloTagHaveProp extends TagSupport {

liangjw1018的专栏 123

保姆级教程:在RK3576上配置USB网卡从零到外网访问(附udev规则详解)

本文提供了在RK3576开发板上配置USB网卡的完整教程,涵盖从内核驱动、udev规则到网络路由的全流程。重点讲解了如何利用USB Gadget功能实现高速网络连接,并构建稳定的算力集群,确保多设备间通信及外网访问。

grass的博客 460

视觉巡线小车(STM32+OpenMV)——技术总结

在现代机器人技术中,视觉巡线是一种常见的导航方式,它允许机器人通过识别和跟踪地面上的线路来自主导航。本文将总结使用STM32微控制器和OpenMV视觉模块来实现视觉巡线小车的关键技术和步骤。

weixin_66608063的博客 3078

java jsp 自定义标签_JSP 自定义标签之一 简单实例

在jsp中使用自定义标签可以达到这样的目的,事实上,我们所熟知的各类框架基本上都是通过自定义标签的形式来实现的。通过使用自定义标签,我们可以将实现复杂的逻辑在页面用简单的标签来加以展示。下面我们来实现一个非常简单的自定义标签,期望通过这个简单的实例引领各位进入自定义标签的领域。我们准备定义的这个自定义标签所实现的功能是在jsp页面中显示出版权信息,并且在以后的博文中,我们还会对它进行升级改造。首先...

weixin_31231693的博客 149

STM32平台下FreeModbus TCP协议栈集成指南

深入讲解在STM32平台如何移植和配置freemodbus协议栈,实现TCP通信功能。结合嵌入式开发细节,帮助开发者快速掌握freemodbus的应用与调试技巧。

weixin_36001279的博客 1144

jsp自定义标签及简单实例

1.引言 本文将介绍JSP标签的一些基本概念以及如何开发及使用自定义标签。带领大家迈上Java Web开发的又一新台阶. 2.什么是自定义标签 2.1.用户自定义的Java语言元素,实质是运行一个或者两个接口的JavaBean. 2.2.可以非常紧密的和JSP的表示逻辑联系在一起,又具有和普通JavaBean相同的业务逻辑处理能力. 2.3.当一个JSP页面转变为servlet时,其

longwei000的博客 1999

基于FPGA的多通道音频信号采样系统设计

FPGA是随着数字集成电路的发展而逐步演变而来的。从早期的电子管、晶体管、小规模集成电路,到超大规模集成电路(VLSIC),数字集成电路的集成度和性能不断提升。FPGA的出现为系统设计师提供了灵活的设计平台,使其能够在不依赖半导体厂商的情况下快速设计专用集成电路(ASIC)。FPGA具有设计周期短、成本低、开发工具先进等优点,广泛应用于原型设计和产品生产中。VHDL是一种用于描述数字系统的硬件描述语言,其语言形式类似于计算机高级语言,但包含了许多硬件特征语句。

qq_62634009的博客 709

7.6 GPU页表更新机制

本文分析了AMDGPU驱动中BO到VA映射的页表更新实现机制。核心流程通过amdgpu_vm_bo_update()函数触发,支持CPU直接写入和SDMA异步命令两种更新模式。系统根据VRAM可见性自动选择最优更新策略,处理三种主要场景:命令提交、BO迁移和BO销毁。关键实现包括DMA地址数组处理、权限标志合并和BO迁移状态转换,最终通过amdgpu_vm_update_range()完成硬件页表更新。该机制有效平衡了更新延迟与吞吐量,为GPU虚拟内存管理提供基础支撑。

图形/计算GPU的驱动与虚拟化技术分享园地 2472

jsp自定义标签实现java的switch……case实例

1、实现MySwitchTag类 package class3g.web.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class MySwitchTag extends Simp

任海丽(3G/移动开发) 4009

笔试题-2023-加特兰-数字IC设计【纯净题目版】

笔试题-2023-加特兰-数字IC设计【纯净题目版】

w0shishabi的博客 2249

jsp解释html标签,jsp自定义标签用法实例详解

本文实例讲述了jsp自定义标签用法。分享给大家供大家参考。具体如下:在JSP中有一种机制,可以让你在JSP页面中插入与HTML类似的标记。本文介绍JSP定制标记的基本概念和构成,以及如何开发和应用JSP定制标记。什么是标记使用HTML语言我们可以这样去编辑我们的网页:HELLO WORLDHELLO WORLD在这里我们把,,称为标记。HTML 标记( HTML Markup)是HTML文档的控制...

weixin_36050283的博客 643

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JSP自定义标签开发入门实例

1.引言本文将介绍JSP标签的一些基本概念以及如何开发及使用自定义标签。带领大家迈上Java Web开发的又一新台阶. 2.什么是自定义标签2.1.用户自定义的Java语言元素,实质是运行一个或者两个接口的JavaBean.2.2.可以非常紧密的和JSP的表

sunshinegeorge的专栏 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

基于JSP 自定义标签使用实例介绍

添加JSP自定义标签: 先添加一个tld文件到WEB-INF文件夹中<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocati...

weixin_33819479的博客 145

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

jsp自定义标签实例

JSP自定义标签。在自定义标签的起始和结束标签之间的部分为标签体(Body)。    标签处理程序类:定义标签的行为,并在JSP引擎遇到自定义标签时调用执行。    标签库描述符(TLD)文件:描述标签库的XML文档,向JSP引擎提供有关自定义标签的标签处理程序的信息。tag标签相关属性:实现简单标签处理程序 标签处理程序是一个在运行时调用的Java类,它包含在 JSP文件中使用的自定义标签的实现代码.标签处理程序必须实现或扩展javax.servlet.jsp.tagext包中的类和接口.javax.se

wwx_zj的专栏 627

JSP:自定义标签——开发实例[4]

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

KingKumg的专栏 641

自定义JSP标签的应用实例

6.3.5  自定义JSP标签的应用实例(2) 例程6-13  转化大写标签的处理类ToUpperCase.java package mytags;  import javax.servlet.jsp.JspException;  import javax.servlet.jsp.tagext.BodyContent;  import javax.servlet.jsp.tagext.

Cactus 677

JSP:自定义标签——开发实例[3]

JSP:自定义标签——开发实例[3]http://www.csai.cn 作者:邓子云 来源:希赛网 2007年7月6日 发表评论 进入社区    三、 开发带标签体的标签  要开发带标签体的标签,可实现BodyTag接口,也可从BodyTag接口的实现类BodyTagSupport继承,为简化开发,推荐从BodyTagSupport类继承开发。  编写标签对应的实现类时,需要

KingKumg的专栏 621

jsp自定义标签"helloworld"实例

<?xmlversion="1.0"encoding="UTF-8"?><taglibxmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml...

weixin_30338743的博客 92

JSP自定义标签实例教程(网络整理较详细)

JSP标签执行顺序  首先来看一下简单标签接口的方法以及它的生命周期     一、SimpleTag接口的方法     1、doTag():void     2、getParent():JspTag     3、setJspBody(javax.servlet.jsp.tagext.JspFragment body):void     4、setJspContext(javax.

yangxiaojun9238的专栏 1863

jsp自定义标签之简单创建实例

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

Java让你与众不同 307
上一篇: 异常javalangOutOfMemoryError: Java hea
下一篇: json 与 struts2
dong_java
博客等级 码龄19年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值