`
dong_java
  • 浏览: 42833 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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()

分享到:
评论
2 楼 cf2huihui 2013-09-23  
谢谢 ,  解决了我的问题
1 楼 love_miaohong 2012-11-21  
  谢谢分享! 描述很清晰

相关推荐

    jsp 自定义标签实例

    本实例将深入探讨如何实现一个简单的JSP自定义标签。 首先,自定义标签的实现主要依赖于两个核心概念:Tag接口和TagSupport类。`Tag`接口定义了自定义标签必须实现的方法,如`doStartTag()`和`doEndTag()`,它们...

    jsp自定义标签实例

    **JSP自定义标签实例详解** 在Java服务器页面(JSP)开发中,自定义标签是一种强大的工具,它允许开发者创建可重用的组件,提高了代码的可读性和可维护性。本文将深入探讨JSP自定义标签的概念、实现过程以及实际...

    JSP自定义标签实例与详细讲解

    五、自定义标签实例 一个简单的HelloWorld自定义标签可能如下: 1. 创建TLD文件(hello.tld): ```xml xsi:schemaLocation=...

    JSP自定义标签实例

    综上所述,JSP自定义标签提供了一种强大的方式来组织和复用代码,而分页标签则是实际项目中常见的应用场景。结合Java反射机制,我们可以灵活地调用各种服务方法,实现复杂的功能,同时保持页面逻辑的清晰和简洁。...

    jsp自定义标签实例.doc

    ### JSP自定义标签概述及实现 #### 一、引言 JSP (JavaServer Pages) 是一种基于Java技术的标准,用于开发动态Web应用程序。它允许开发者将Java代码嵌入到HTML页面中,从而实现动态内容的生成。为了提高代码的复用...

    一个JSP自定义标签的例子。格式化基础数据

    #### 三、创建JSP自定义标签实例:格式化数据 假设我们需要创建一个用于格式化日期的自定义标签。下面将详细介绍创建步骤: ##### 1. 定义标签库描述文件(TLD) 首先,我们需要定义一个标签库描述文件(TLD),...

    jsp 自定义标签的使用

    本教程将深入探讨JSP自定义标签的使用,同时结合实例介绍分页和下拉框绑定值的封装。 一、JSP自定义标签基础 1. **定义标签库(Tag Library)**:自定义标签首先需要定义一个TLD(Tag Library Descriptor)文件,它...

    jsp自定义标签入门实例

    本实例将带你深入理解JSP自定义标签的创建和使用。 首先,我们要了解自定义标签的结构。自定义标签通常由三部分组成:标签库描述文件(TLD)、标签处理类(Tag Handler)和JSP页面。TLD是XML格式的文件,用于定义...

    JSP自定义标签入门实例

    为了运行和测试这个自定义标签实例,你需要将其部署到支持JSP的Web服务器(如Tomcat),然后通过浏览器访问`index.jsp`页面。如果一切配置正确,你应该能看到自定义标签按预期工作。 通过学习和实践这个JSP自定义...

    jsp自定义标签简单实例

    以下是一个关于"jsp自定义标签简单实例"的详细说明。 1. **自定义标签概述** 自定义标签是JSP 1.2版本引入的新特性,它允许开发者创建符合XML语法规则的自定义标签库,这些标签库可以包含一系列具有特定功能的标签...

    JSP 自定义标签之一 简单实例

    下面我们来实现一个非常简单的自定义标签,期望通过这个简单的实例引领各位进入自定义标签的领域。我们准备定义的这个自定义标签所实现的功能是在JSP页面中显示出版权信息,并且在以后的博文中,我们还会对它进行...

    jsp自定义标签大全.rar

    本资源“jsp自定义标签大全.rar”提供了一套全面的JSP自定义标签的实例和指南,旨在帮助开发者深入理解和应用这一特性。 **JSP自定义标签的基本概念** JSP自定义标签不同于标准动作标签(如&lt;jsp:include&gt;或&lt;jsp:...

    jsp 自定义标签有实例的DLC

    本DLC(Digital Learning Content,数字学习资源)将深入探讨如何创建和使用JSP自定义标签,并通过实例来帮助理解这一过程。 一、JSP自定义标签基础 1.1 JSP标准标签库(JSTL) 在自定义标签之前,我们需要了解...

Global site tag (gtag.js) - Google Analytics