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

Java代码

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

配置文件    
Xml代码

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. <tag>
  16. <name>date</name>
  17. <tag-class>com.langhua.tagsupport.DateTag</tag-class>
  18. <body-content>empty</body-content>
  19. <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->
  20. <attribute>
  21. <!-- 标签名 -->
  22. <name>time</name>
  23. <!-- 是否为可选属性 -->
  24. <required>false</required>
  25. <!-- 是否接受JSP表达示计算结果 -->
  26. <rtexprvalue>true</rtexprvalue>
  27. </attribute>
  28. <attribute>
  29. <name>pattern</name>
  30. <required>true</required>
  31. <rtexprvalue>false</rtexprvalue>
  32. </attribute>
  33. </tag>
  34. <tag>
  35. <name>loop</name>
  36. <tag-class>com.langhua.tagsupport.LoopTag</tag-class>
  37. <body-content>JSP</body-content>
  38. <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->
  39. <attribute>
  40. <!-- 标签名 -->
  41. <name>times</name>
  42. <!-- 是否为可选属性 -->
  43. <required>true</required>
  44. <!-- 是否接受JSP表达示计算结果 -->
  45. <rtexprvalue>true</rtexprvalue>
  46. </attribute>
  47. </tag>
  48. </taglib>

JSP页面    
Html代码

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

TagSupport的流程图

SKIP_BODY 表示不用处理标签体,直接调用doEndTag()方法。
   
    SKIP_PAGE 忽略标签后面的JSP内容。
   
  EVAL_PAGE 处理标签后,继续处理JSP后面的内容。
   
  EVAL_BODY_BUFFERED 表示需要处理标签体。
   
  EVAL_BODY_INCLUDE 表示需要处理标签体,但绕过setBodyContent()和doInitBody()方法
   
  EVAL_BODY_AGAIN 对标签体循环处理。

jsp自定义标签 TagSupport相关推荐

  1. 如何使用jsp自定义标签 JspTag 使用入门

    java开发中,sturts标签和c标签就是我们常用的两种标签,本文主要教大家如何定义自己的标签,已达到代码整合,公共化的目的.通过jsp自定义标签,可以将一个元素,或者一个表格,一个div甚至整个页 ...

  2. JSP自定义标签学习笔记

    http://blog.csdn.net/liangbinny/article/details/6309893 本文是本人学习<JavaWeb学习>书籍所记下的学习笔记 一.概述 JSP ...

  3. JSP自定义标签开发入门

    一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发 ...

  4. html模板(base标签,meta标签,禁用浏览器缓存)+JSP自定义标签荔枝

    [1]html模板 <html> <head><!-- base标签表示uri相对路径的基准路径 --><base href="http://loc ...

  5. jsp自定义标签(taglib)编写的原理和实现

    jsp自定义标签(taglib)编写的原理和实现 转:http://www.javaeye.com/topic/157737 个tag就是一个普通的java类,它惟一特别之处是它必须继承TagSupp ...

  6. 浅谈JSP自定义标签实现过程

    (一) 没有正文的JSP自定义标签实现 (1):定义JSP自定义标签处理类 import java.io.IOException; import java.util.Date; import java ...

  7. JSP自定义标签详解(1)

    JSP自定义标签 自定义JSP标签概述 自定义JSP标签就是程序员定义的一种JSP标签,这种标签把那些信息显示逻辑封装在一个单独的Java类中,通过一个XML文件来描述它的使用.当页面中需要使用类似的 ...

  8. java标签uri,JSP自定义标签-定制URI

    JSP自定义标签-定制URI 1 JSP自定义标签的定制URI 默认情况下JSP自定义标签的tld文件存放在WEB-INF目录下,但是我们可以使用自定义URI来改变tld文件存放的位置.重点是,需要在 ...

  9. java jsp 自定义标签_JSP自定义标签

    在本章中,我们将讨论JSP中的自定义标签.自定义标签是用户定义的JSP语言元素.当包含自定义标签的JSP页面被转换成一个servlet时,标签被转换为一个名为标签处理程序的对象的操作. 然后,Web容 ...

最新文章

  1. 第九期直播|《深度相机与应用》精彩回顾
  2. Js + Css的msn式的popup提示窗口的实现
  3. StringTokenizer(字符串标记)
  4. [PY3]——内置数据结构(3)——字符串及其常用操作
  5. 使用CSS对页面加载的淡入效果
  6. python中的散点图代码-绘制python中的线和散点图
  7. 云炬60s看世界20211122
  8. OpenGL blending sort 混合排序(前后)的实例
  9. Android编译笔记四
  10. dbms_xplan.display_cursor 获取执行过的sql的执行计划
  11. Java JNI浅析(一)
  12. [Android] 开源View组件(一)
  13. [深入学习C#]LINQ查询表达式详解(2)——查询表达式的转换
  14. 每日一则----算法----二分查找法
  15. 只要学会这个PDF压缩方法,压缩PDF不再是难题
  16. 在Linux下进入目录,目录下创建、修改、删除文件所需权限
  17. 好的电子书资源——原创力文档
  18. 【Unity3D 问题总结】Failed to import package with error: Couldn‘t decompress package
  19. Initialization in《The Java® Virtual Machine Specification Java SE 7 Edition》
  20. 使用poi将数据库数据表中的数据导出成excel

热门文章

  1. NVIDIA Jetson tx2i 设置cuda10.2 _cudnn8.0, 安装 pyTorch
  2. STM32-I2C通信在AT24C02的应用
  3. 咆哮体---出师表!!!
  4. Stimulsoft Reports.JAVA 2022.4.5 Crack
  5. 洛谷 T244318 【图的存储】公路查询
  6. Redis学习(2):Jedis使用Redis示例
  7. Excel文件的解析
  8. 微信公众号获取用户头像昵称,用户信息
  9. 【python 视频爬虫】python下载头条视频
  10. TDK MPU9250的详细功能 替代方案ICM20948