JSP 自定义标签

  自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。

  JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。

你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签

开发步骤

  接下来,将开发一个自定义标签,功能是将long类型的时间,转化成时间的字符串。

  1. 要创建自定义的JSP标签,你首先必须创建处理标签的Java类。所以,让我们创建一个LongDateTag类,如下所示:

     package com.tag;
    
     import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar; import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.TagSupport; /**
    *
    * 自定义JSTL标签类
    * 处理:1.long类型时间转换字符串
    *
    * @author H__D
    *
    */
    public class LongDateTag extends TagSupport{ private PageContext pageContext; private String value;
    private String partten; //设置PageContext对象
    public void setPageContext(PageContext pageContext) { //System.out.println("设置PageContext对象!");
    this.pageContext = pageContext;
    } public void setValue(String value)
    {
    this.value = value;
    }
    public void setPartten(String partten)
    {
    this.partten = partten;
    } /**
    * 标签开始处理..调用的方法
    *
    */
    @Override
    public int doStartTag() throws JspException {
    String vv = String.valueOf(value);
    System.out.println(vv);
    Long time = Long.valueOf(vv);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(time);
    if(partten == null || partten.trim().length() == 0)
    partten = "yyyy-MM-dd HH:mm:ss.SSS";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(partten);
    String str = simpleDateFormat.format(calendar.getTime()); try {
    pageContext.getOut().write(str);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } return super.doStartTag(); } /**
    *
    * 标签处理结束的调用的方法
    */
    @Override
    public int doEndTag() throws JspException {
    // TODO Auto-generated method stub
    return super.doEndTag();
    } /**
    *
    * 释放资源
    */
    @Override
    public void release() {
    // TODO Auto-generated method stub
    super.release();
    } /**
    *
    * 测试主方法
    * @param args
    */
    public static void main(String[] args) {
    long a = 123456789123l;
    long time = Long.valueOf(a);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(time);
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    System.out.println(simpleDateFormat.format(calendar.getTime()));
    } }

    LongDateTag

  2. 编写自定义标签的描述文件datetag.tld,将它放在WEB-INF下面,如下所示:
     <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <!-- 标签描述TLD文件 --> <taglib>
    <tlib-version>1.1</tlib-version>
    <jsp-version>1.2</jsp-version> <!-- 默认前缀名 -->
    <short-name>diy</short-name> <uri>http://www.mytaglib.com/taglib</uri>
    <display-name>MyDateTaglib</display-name>
    <description>My date taglib!</description> <tag>
    <name>date</name>
    <tag-class>com.tag.LongDateTag</tag-class> <attribute>
    <name>value</name>
    <!-- 属性是否必须 -->
    <required>true</required>
    <!-- 属性是否支持小脚本 EL表达式 -->
    <rtexprvalue>true</rtexprvalue>
    </attribute> <attribute>
    <name>partten</name>
    <!-- 属性是否必须 -->
    <required>false</required>
    <!-- 属性是否支持小脚本 EL表达式 -->
    <rtexprvalue>true</rtexprvalue>
    </attribute> </tag> </taglib>

    datetag

  3. 在web项目中的web.xml文件中声明自定义标签,如下所示:
     <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>test</display-name> <!-- 自定义JSTL时间格式化标签 -->
    <jsp-config>
    <taglib>
    <taglib-uri>http://www.mytaglib.com/taglib</taglib-uri>
    <taglib-location>/WEB-INF/datetag.tld</taglib-location>
    </taglib>
    </jsp-config> <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    </web-app>

    web.xml

  4. 在jsp页面中使用自定义标签,如下所示:                                                                                                    
  5.  <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib prefix="diy" uri="http://www.mytaglib.com/taglib" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <diy:date value="123"></diy:date>
    </body>
    </html>

    index.jsp

  6. 启动服务,打开index界面,效果图,如下所示

    

自定义标签的执行流程

  JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法。

  1. public void setPageContext(PageContext pc), JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信。
  2. public void setParent(Tag t),setPageContext方法执行完后,WEB容器接着调用的setParent方法将当前标签的父标签传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent方法的参数值为null。
  3. public int doStartTag(),调用了setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法。
  4. public int doEndTag(),WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。
  5. public void release(),通常WEB容器执行完自定义标签后,标签处理器会驻留在内存中,为其它请求服务器,直至停止web应用时,web容器才会调用release方法。

【JSP】自定义标签开发入门的更多相关文章

  1. JSP自定义标签开发入门《转》

    JSP自定义标签开发入门 一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; ...

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

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

  3. javaweb学习总结(二十三)——jsp自定义标签开发入门

    一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...

  4. javaweb(二十三)——jsp自定义标签开发入门

    一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...

  5. JSP自定义标签开发步骤

    自定义的标签库一.基本概念: 1.标签(Tag): 标签,通常也成为动作,是一组按照XML语法格式编写的代码片段,在JSP中,用来封装在页面中可重复利用的逻辑,通过标签可以使JSP网页变得简洁并且易于 ...

  6. jsp自定义标签开发

    参考:http://blog.csdn.net/lw001x/article/details/7589302

  7. 【转】Jsp自定义标签详解

    一.前言 原本是打算研究EXtremeComponents这个jsp标签插件,因为这个是自定义的标签,且自身对jsp的自定义标签并不是非常熟悉,所以就打算继续进行扫盲,开始学习并且整理Jsp自定义标签 ...

  8. 深入分析JavaWeb Item23 -- jsp自己定义标签开发入门

    一.自己定义标签的作用 自己定义标签主要用于移除Jsp页面中的java代码. 二.自己定义标签开发和使用 2.1.自己定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 要编写一 ...

  9. JSP 自定义标签

    0 标签技术的API继承体系 1 作用 jsp自定义标签用于移除页面中的java代码 2 实现 2.1 标签处理类ViewIPTag.java package com.zsm.util; import ...

随机推荐

  1. time.h-------日期与时间函数

    1.clock函数----返回CPU计时单元.函数返回开启这个程序进程到程序中调用clock函数时之间的CPU时钟计时单元(返回毫秒). (计的是占用cpu的时间) 函数原型:long clock() ...

  2. 在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗

    转自 http://www.cnblogs.com/zdxster/archive/2011/01/27/1945868.html 在EOS6的项目中,如果采用VC++开发的ActiveX,那么第一次 ...

  3. linux 平均负载 load average 的含义

      load average 的含义 平均负载(load average)是指系统的运行队列的平均利用率,也可以认为是可运行进程的平均数. 以路况为例, 单核CPU.单车道 情况如下: 0.00-1. ...

  4. No.5__C#

    One month 今天是个有纪念意义的日子,2015-4-23.今天是实习的第一个月,算是成就达成吧.虽然,除去了周末六日和清明什么的,只剩下20多天了,但是,还是好开心 啊,毕竟是第一次参加工作, ...

  5. No.1__C#

    这是第一篇C#的日记,到现在为止已经学习了一个礼拜的C#了.由于是实习中才开始学习,所以这次不准备像在大学学习那样,拿着课本划重点,背概念.这应当是一门实践的课程,应该一边编程,一边学.这是到公司第一 ...

  6. 飞凌OK6410开发板SDIO无线8189WIFI模块驱动移植

    为什么要移植?开发板不是已经提供了无线驱动吗? 貌似是这样的..本来是好用的.加入自己第三方驱动后发现WIFI用不了...最后发现飞凌提供的内核里面没有8189芯片的代码...问售后他们说那边是好的. ...

  7. IPTV视频基本概念

      480x320, 640x480 标清 1024x720p 高清 1920x1080i (隔行扫描) 也属于高清 1920x1080p 全高清 3840x2160,7680x4320 超(高)清 ...

  8. hive查询

    查询语句可以直接使用非分析函数的变量的别名 select t1.* from ( select account_id, sum(recharge_money) recharge_money_total ...

  9. winform.布局

    布局:默认布局:自己拖动进行布局,工具栏里对齐方式 右键,锁定.##随容器拉动变化属性:Anchor:上下左右,固定的设置 panel的排列 1.Dock属性:(顺序填充)Top:靠上,高度不变,左右 ...

  10. A Beginner's Guide To Understanding Convolutional Neural Networks(转)

    A Beginner's Guide To Understanding Convolutional Neural Networks Introduction Convolutional neural ...